我正在关注Twitter Scala学校教程,我遇到了一个问题。在隐式视图的部分中,在高级类型here下,它声明方法可以为类型请求特定类型的证据。
它列出了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已经改变了。
答案 0 :(得分:4)
<%<
已被弃用,可能现已删除,这就是您看到错误的原因(这不是语法错误)。您可以使用=>
实现相同的功能,因为视图本质上是一个隐式函数实例:
def printIt(implicit evidence : A => String) = println(evidence(value))
请注意,由于println
采用类型Any
的参数,因此除非您明确地执行此操作,否则可能不会应用该函数。如果您使用了需要String
的方法,那么编译器会查找隐式。