从Any到Dynamic的隐式转换

Pet*_*itz 8 scala dynamic-typing

以下为什么不工作?(是的,我正在使用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
Run Code Online (Sandbox Code Playgroud)

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

ret*_*nym 9

编译器首先从中查找隐式视图String => { def hello: ? }.那失败了,所以它会检查是否String <: Dynamic.这些没有合并.

此动态应用功能尚未最终确定 - 在Scala 2.9.0中它是实验性的,可能会有所变化.但是我怀疑这会被包含在内,因为有了这样一种暗示,你会把所有类型的安全性抛到窗外.对于拼写错误的方法名称或不正确的参数类型,您永远不会遇到编译错误.你的用例是什么?