<%运算符的功能是什么?

时间:2014-07-28 14:41:21

标签: scala

最近,我查看了implicit chainimplicit def foo[C3 <% C](c: C)的示例。我认为我对&lt;%和(隐式c:C)之间的区别感到困惑。

如果我写隐式def bToC [C3&lt;:C](c:C)(隐式c3:C3),它会给出一个编译错误,但为什么这样,隐式def应该在范围内?

修改

有人可以解释原因吗

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)

不工作?

非常感谢提前

1 个答案:

答案 0 :(得分:1)

[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在评论中提到的那样。 :)