期待一个函数,但传递了一个值
Expect a function but a value is passed
我有以下特征定义:
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
的函数并且上面传递了一个值。为什么编译器不抱怨?
是下划线。
请记住,对于 x => x.value
,_.value
是 shorthand,在这种情况下,这意味着 ...
(x:Box[A]) => x.value
... 符合 B => A
的定义,其中 B
是 Box[A]
而 A
是……好吧,A
。仍然没有解决,但是编译器没有什么可抱怨的,因为代码中没有任何矛盾。
我有以下特征定义:
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
的函数并且上面传递了一个值。为什么编译器不抱怨?
是下划线。
请记住,对于 x => x.value
,_.value
是 shorthand,在这种情况下,这意味着 ...
(x:Box[A]) => x.value
... 符合 B => A
的定义,其中 B
是 Box[A]
而 A
是……好吧,A
。仍然没有解决,但是编译器没有什么可抱怨的,因为代码中没有任何矛盾。