从任意形式到动态形式的隐式转换
问题描述:
为什么不是以下工作? (是的,我与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")
?
您的权利与类型安全。但是如果我将隐式def限制在我的用例'implicit def X2Dynamic(x:X)= new X {...}'(我的问题仍然存在,类型安全问题仅限于'X')以构建带有动态调用,所以可以调用方法,例如用xml在外部定义。到目前为止只是一个实验...顺便说一句,感谢您的链接源! – 2011-05-15 14:45:22
我其实觉得这种行为很好。它可以允许在狭窄的范围内使用动态语言功能。非常适合脚本或DSL。 – IttayD 2011-05-15 14:47:25
@IttayD我也是;)至少要记住,当涉及到一个复杂的答案这里一个体面的问题。 – 2011-05-15 14:55:23