【问题标题】:Implicit view parameter隐式视图参数
【发布时间】:2013-07-20 05:30:16
【问题描述】:

我正在关注 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 是否发生了变化。

【问题讨论】:

  • 请始终包含实际错误,不要简单地将其描述为“报告语法错误”。

标签: scala implicit


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢。 println() 对我来说只是一个占位符,我不打算用它做任何事情。
猜你喜欢
  • 2021-04-10
  • 1970-01-01
  • 1970-01-01
  • 2012-08-05
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 2019-04-29
相关资源
最近更新 更多