最近,我看了implicit chainimplicit def foo[C3 <% C](c: C)的示例。我认为我对
如果我编写隐式def bToC [C3
编辑:

有人可以解释为什么
implicit def aToB[A1 : A](a: A1)(implicit ev: Int => A1): B = new B(a.n, a.n)

implicit def aToB[A1 <: A](a: A1)(implicit ev: Int => A1): B = new B(a.n, a.n)
不工作吗?

提前谢谢了

最佳答案

[C3 <% C]表示implicit ev: C3 => C。换句话说,一个隐式函数将C3转换为C。因此,作用域中的所有C3对象都可以是C对象。

def intPlus1[A <% Int](a: A) = a + 1
// def intPlus1[A](a: A)(implicit ev: A => Int) = a + 1

implicit def string2int(s: String) = s.toInt // String => Int

intPlus1("100")
intPlus1("100")(string2int)
// the result bark bark

请注意,对于任何A <% A来说,A都是必需的,因为隐式函数A => APredef的版本,因此B <% A如果也是B <: A也是如此,如@rightfold在评论中提到的。 :)

09-26 20:50