3
在下面的代碼:是否明確提供了可能在Scala中的上下文綁定?
def sum[A: Monoid](xs: List[A]): A = {
val m = implicitly[Monoid[A]]
xs.foldLeft(m.mzero)(m.mappend)
}
如果我已經在我的範圍Monoid[Int]
有mappend = _ + _
,我可以打電話給我用明確Monoid[Int]
具有不同的行爲功能?或者唯一的解決方案是使用更詳細的語法,第二個參數implicit monoid: Monoid[Int]
?
代碼爲例來源於此Scalaz教程:http://eed3si9n.com/learning-scalaz/sum+function.html
在末尾,作者展示提供了明確的含半幺羣的爲例,但他並沒有使用上下文範圍:
scala> val multiMonoid: Monoid[Int] = new Monoid[Int] {
def mappend(a: Int, b: Int): Int = a * b
def mzero: Int = 1
}
multiMonoid: Monoid[Int] = [email protected]
scala> sum(List(1, 2, 3, 4))(multiMonoid)
res14: Int = 24