Type Class
《Demystifying Implicits and Typeclasses in Scala》一文的整理翻译。
The idea of typeclasses is that you provide evidence that a class satisfies an interface。
类型类思想是你提供了一个类满足于一个接口的证明。
trait CanFoo[A] {
def foos(x: A): String
}
case class Wrapper(wrapped: String)
object WrapperCanFoo extends CanFoo[Wrapper] {
def foos(x: Wrapper) = x.wrapped
}
类型类思想是你提供了一个类(Wrapper)满足于一个接口*(CanFoo)的证明(WrapperCanFoo)。
Wrapper
不是直接的去继承一个接口,类型类让我们把类的定义和接口的实现分开。这表示,我可以为你的类实现一个接口,或者第三方可以为你的类实现我的接口,并且一切基本结束工作。
但是有一个明显的问题,如果你想把一个东西实现为CanFoo
,你需要同时询问你的调用者类的实例和协议。
def foo[A](thing: A, evidence: CanFoo[A]) = evidence.foos(thing)
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.