加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

设计模式 – 在Scala中为常见问题建立了哪些常见模式/解决方案

发布时间:2020-12-16 08:50:16 所属栏目:安全 来源:网络整理
导读:我会开始滚球. 给定一系列元素,其中一些元素可以被多次包含,一个典型的要求是计算它们 – 以计数或直方图的形式. 经常引用的解决方案是: ss.groupBy(identity).mapValues(_.size) 那么Scala中常见的类似问题还有其他解决方案吗? 解决方法 使用Monoids或Num
我会开始滚球.

给定一系列元素,其中一些元素可以被多次包含,一个典型的要求是计算它们 – 以计数或直方图的形式.

经常引用的解决方案是:

ss.groupBy(identity).mapValues(_.size)

那么Scala中常见的类似问题还有其他解决方案吗?

解决方法

使用Monoids或Numerics为富类定义合理的操作,必要时使用含义.

case class Money(ccy: Currency,amount : BigDecimal) {
  def +(that : Money) = { 
    require(this.currency == that.curency)
    copy(amount = this.amount + that.amount)
  }
  def abs = copy(amount = amount.abs)
}

那么,让我们说我有一个Money的集合,我想总结它们:

val turnover = trades.map(_.usdValue.abs).∑ //no implicit monoid :-(

但为了做到这一点,我需要一个隐含的Monoid.但是,当然,如果我已经有一些货币,那么Money的零值才有意义!

implicit def CurrencyMonoid(implicit currency : Currency) = new Monoid[Currency] {
  def zero = Money(currency,0)
  def append(m1 : Money,m2 : Money) = m1 + m2
}

所以现在Scala将使用这两个含义:

implicit val usd = Currency.USD
val turnover = trades.map(_.usdValue.abs).∑ //yay for monoids :-)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读