【发布时间】:2014-03-26 17:54:12
【问题描述】:
我是 Scala 新手,当我查看不同的项目时,我看到了两种处理隐式参数的风格
scala]]>def sum[A](xs:List[A])(implicit m:Monoid[A]): A = xs.foldLeft(m.mzero)(m.mappend)
sum:[A](xs:List[A])(implicit m:Monoid[A])A
和
scala]]>def sum[A:Monoid](xs:List[A]): A ={
val m = implicitly[Monoid[A]]
xs.foldLeft(m.mzero)(m.mappend)
}
sum:[A](xs:List[A])(implicit evidence$1:Monoid[A])A
根据这两个函数的类型,它们是匹配的。两者有区别吗?为什么要隐式使用隐式参数?在这个简单的例子中,感觉更加冗长。
当我在 REPL 中使用没有隐式的东西运行上述内容时,我收到以下错误
带有隐式参数
<console>:11: error: could not find implicit value for parameter m: Monoid[String]
和
隐式地和 a: Monoid
<console>:11: error: could not find implicit value for evidence parameter of type Monoid[String]
【问题讨论】: