最近,我看了implicit chain,implicit 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 => A
是Predef
的版本,因此B <% A
如果也是B <: A
也是如此,如@rightfold在评论中提到的。 :)