设计模式 – 在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 :-) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |