根据样式指南 - 是否存在一个经验法则?Scala中的类别类型应该使用什么规则?context bound
或implicit ev
表示法?是否在Scala中使用上下文绑定或隐式ev
这两个例子做结合的相同
上下文具有更简洁函数签名,但需要val
评价与implicitly
呼叫:
def empty[T: Monoid, M[_] : Monad]: M[T] = {
val M = implicitly[Monad[M]]
val T = implicitly[Monoid[T]]
M.point(T.zero)
}
的implicit ev
方法自动插入类型类成函数参数,但污染方法签名:
def empty[T, M[_]](implicit T: Monoid[T], M: Monad[M]): M[T] = {
M.point(T.zero)
}
大部分的图书馆我che cked(例如"com.typesafe.play" %% "play-json" % "2.6.2"
)使用implicit ev
你在使用,为什么?
我完全同意,但我想补充一个小精度:隐式搜索是通过执行编译器在编译时,所以绝对没有运行时性能的影响。结论:这实际上就像你说“基于意见”一样。 –
没有运行时性能影响,但编译时性能在scala代码库中有点问题,所以我总是倾向于留意它;)也可能有一点运行时间的开销,因为你正在做一个额外的方法调用(隐含''),但是JVM可能会嵌入那个 –
谢谢!用'apply'方法真的很好,检查了文章。虽然没有在'scalaz'中找到,但是 –