我有以下特质定义:
trait Printable[A] { self =>
def format(value: A): String
def show() : String = "Hello"
def contramap[B](func: B => A): Printable[B] =
new Printable[B] {
def format(value: B): String =
self.format(func(value))
}
}
和类型:
final case class Box[A](value: A)
以及它的隐式实现:
implicit def boxPrintable[A](implicit p: Printable[A]) =
p.contramap[Box[A]](_.value)
contramap
期望具有func: B => A
的函数,并且值正在上面传递。编译器为什么不抱怨?
答案 0 :(得分:3)
它是下划线。
请记住,_.value
是x => x.value
的简写,在这种情况下,这意味着......
(x:Box[A]) => x.value
...符合B => A
B
Box[A]
A
和A
的定义......好吧,{{1}}。它还没有解决,但编译器没有什么可抱怨的,因为代码中没有任何矛盾。