隐式视图参数

时间:2013-07-21 10:25:50

标签: scala implicit

我正在关注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已经改变了。

1 个答案:

答案 0 :(得分:4)

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

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

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