期待一个函数,但传递了一个值

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 的定义,其中 BBox[A]A 是……好吧,A。仍然没有解决,但是编译器没有什么可抱怨的,因为代码中没有任何矛盾。