0

我正在关注 Twitter Scala 学校教程,但遇到了一个问题。在隐式视图部分,在这里的高级类型下,它指出方法可以要求类型的特定类型的证据。

它列出了其中的 3 种证据——

A =:= B A must be equal to B
A <:< B A must be a subtype of B
A <%< B A must be viewable as B

但是,当我尝试第三种时,我编写的代码有语法错误。

这是我的代码

class ContainerTwo[A](value : A) {
  // A must be a subtype of Int
  def addIt(implicit evidence : A <:< Int) = 123 + value
  // A must be a viewable as a String
  def printIt(implicit evidence : A <%< String) = println(evidence)  // This line reports an error at <%< - "Cannot resolve symbol <%<"
  // A must be a subtype of a String 
  def doSomethingWithAString(implicit evidence : A <:< String) = println(evidence)

}

我正在使用 Scala 2.10。我不确定我是否做错了什么,教程有误,或者自编写教程以来 Scala 是否发生了变化。

4

1 回答 1

4

<%<已弃用并可能现在已删除,这就是您看到错误的原因(这不是语法错误)。您可以使用 来实现相同的目的=>,因为视图本质上是一个隐式函数实例:

def printIt(implicit evidence : A => String) = println(evidence(value))

请注意,由于println接受 type 的参数Any,因此除非您明确执行,否则该函数可能不会被应用。如果您使用了需要 a 的方法String,那么编译器将查找隐式。

于 2013-07-21T10:35:41.740 回答