¿Por qué no funciona lo siguiente? (Sí, estoy trabajando con 2.9.0final y la vuelta a la "-Xexperimental" opción.)Conversión implícita de cualquiera a dinámico
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
Uno puede discutir sobre lo significativo que esto es ... Si esto funcionaría como se esperaba lo la precedencia tendrá lugar en "Say".toInt
: StringLike.toInt
o (new Dynamic {...}).applyDynamic("toInt")
?
Su derecho con la seguridad del tipo. Pero, ¿qué sucede si restrinjo la definición implícita a mi caso de uso? Implícita def X2Dynamic (x: X) = nueva X {...} '(mi problema permanece, tipo problema de seguridad restringido a' X') para construir una DSL con dinámica invocación, por lo que uno puede invocar métodos que, por ejemplo, definido externamente en xml. Solo un experimento en mente hasta ahora ... Por cierto, ¡gracias por los enlaces a la fuente! –
De hecho, creo que este tipo de comportamiento es genial. Puede permitir el uso de capacidades de lenguaje dinámico en un ámbito estrecho. Ideal para scripts o DSL. – IttayD
@IttayD Me, también;) Al menos tenerlo en cuenta cuando se trata de una respuesta sofisticada a una pregunta decente aquí en SO. –