gpt4 book ai didi

scala - 在 Scala 中是否可以明确提供上下文绑定(bind)?

转载 作者:行者123 更新时间:2023-12-01 07:24:28 24 4
gpt4 key购买 nike

在下面的代码中:

   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

最后作者展示了一个显式提供 Monoid 的例子,但他没有使用上下文边界:

scala> val multiMonoid: Monoid[Int] = new Monoid[Int] {
def mappend(a: Int, b: Int): Int = a * b
def mzero: Int = 1
}
multiMonoid: Monoid[Int] = $anon$1@48655fb6

scala> sum(List(1, 2, 3, 4))(multiMonoid)
res14: Int = 24

最佳答案

上下文边界只不过是语法糖。以下内容:

def sum[A: Monoid](xs: List[A])

完全相同:

def sum[A](xs: List[A])(implicit evidence: Monoid[A])

这意味着无论您如何定义sum 方法(使用上下文绑定(bind)或使用隐式参数),您都可以显式传递隐式参数,如sum(List (1, 2, 3, 4))(multiMonoid)

关于scala - 在 Scala 中是否可以明确提供上下文绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16624371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com