【问题标题】:Dynamic trait difference from Scala 2.9 to 2.10从 Scala 2.9 到 2.10 的动态特征差异
【发布时间】:2013-03-01 17:48:12
【问题描述】:

我已经编写了一些 sn-p 代码来测试动态特征功能:

class Foo extends Dynamic {
  def selectDynamic(name: String) {
    println("selectDynamic: " + name)
  }
  def applyDynamic(name: String)(args: Any*) {
    println("applyDynamic: " + name)
  }
  def applyDynamicNamed(name: String)(args: (String, Any)*) {
    println("applyDynamicNamed: " + name)
  }
  def updateDynamic(name: String)(value: Any) {
    println("updateDynamic: " + name)
  }
}

object Test {
  def main(args: Array[String]) {
    val foo = new Foo
    foo.bar(5)     //1
    foo.bar(x = 5) //2
    foo.bar        //3
    foo.baz = 5    //4
  }
}

问题在于它在 Scala 2.9 和 2.10 中都无法编译,因为 main 中的第四行:

error: reassignment to val
foo.baz = 5

如果我评论这个字符串,2.9 会抱怨第二行:

error: not found: value x
foo.bar(x = 5)

同时 2.10 将编译并且程序将生成:

applyDynamic: bar
applyDynamicNamed: bar
selectDynamic: bar

所以现在我想知道我是否做错了什么(可能错过了一些依赖项)? Scala 2.9 和 2.10 中的 Dynamic 有区别吗? foo.baz = 5 有什么问题?

【问题讨论】:

  • error: value update is not a member of Unit; foo.baz() = 5

标签: scala


【解决方案1】:

【讨论】:

    猜你喜欢
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    相关资源
    最近更新 更多