8

为什么以下不起作用?(是的,我正在使用2.9.0final并打开“ -Xexperimental ”选项。)

implicit def any2Dynamic(a: Any) = new Dynamic {
  def applyDynamic(name: String)(args: Any*) = {
    println(a + name)
  }
}

"Say".hello // value hello is not a member of java.lang.String

人们可以争论这是多么有意义......如果这能按预期工作,那么优先级将发生在"Say".toInt:StringLike.toInt(new Dynamic {...}).applyDynamic("toInt")?

4

1 回答 1

9

编译器首先String => { def hello: ? }. 那失败了,所以它然后检查是否String <: Dynamic. 这些没有结合。

此动态应用功能尚未最终确定——在 Scala 2.9.0 中,它是实验性的,可能会发生变化。但我怀疑这是否会被包括在内,就像这样一个隐含的,你把所有的类型安全都抛到了窗外。对于拼写错误的方法名称或不正确的参数类型,您永远不会收到编译错误。你的用例是什么?

于 2011-05-15T14:30:34.830 回答