获取Scala类型绑定错误:未找到:键入<%<

jpi*_*ihl 7 scala type-bounds

所以我一直在尝试通过Twitter Scala学校学习Scala .但我现在仍然坚持他们的一个类型绑定示例.

特别是,使用<%<类型关系运算符,类型必须可以作为特定类型查看.

当我在Scala控制台中执行以下代码时:

scala> class Container[A](value: A) { def addIt(implicit evidence: A <%< Int) = 123 + value }
Run Code Online (Sandbox Code Playgroud)

...我收到以下错误:

<console>:7: error: not found: type <%<
       class Container[A](value: A) { def addIt(implicit evidence: A <%< Int) = 123 + value }
                                                                     ^
<console>:7: error: overloaded method value + with alternatives:
  (x: Double)Double <and>
  (x: Float)Float <and>
  (x: Long)Long <and>
  (x: Int)Int <and>
  (x: Char)Int <and>
  (x: Short)Int <and>
  (x: Byte)Int <and>
  (x: String)String
 cannot be applied to (A)
       class Container[A](value: A) { def addIt(implicit evidence: A <%< Int) = 123 + value }
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么Scala解释器抱怨?

我一直在尝试查看Scala文档,但我无法在任何地方找到运算符的信息.我可以看到Scala学校是在Scala 2.8.0的基础上创建的,我正在运行Scala 2.10.0 - 所以这可能已被删除了?如果是这种情况,为什么这看起来像一个有用的运算符?

Imp*_*ive 8

A <%< BScala 2.8中的约束定义为

  sealed abstract class <%<[-From, +To] extends (From => To)
  object <%< {
    implicit def conformsOrViewsAs[A <% B, B]: A <%< B = new (A <%< B) {def apply(x: A) = x}
  }
Run Code Online (Sandbox Code Playgroud)

所以你总能把它带回去.不过,我猜它是过时的原因是绑定一个视图只是要求一个隐函数从AB,而且也表现在已经是普遍的方式,尤其是约束一个完美的方法:

class Container[A](value: A) { def addIt(implicit evidence: A => Int) = 123 + value }
Run Code Online (Sandbox Code Playgroud)

顺便说一句,值得注意的是,不是运算符,而是从定义中可以看到的中缀位置.同样如此=>,这只是引用Function1类型构造函数的另一种方式.