从Any到Dynamic的隐式转换

时间:2011-05-15 12:31:04

标签: 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

有人可以争论这是多么有意义......如果这可以按预期工作,那么优先权将在"Say".toIntStringLike.toInt(new Dynamic {...}).applyDynamic("toInt")进行?

1 个答案:

答案 0 :(得分:9)

编译器首先looks来自String => { def hello: ? }的隐式视图。那失败了,所以如果String <: Dynamicchecks。这些都没有合并。

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