5
Sólo la implementación de un objeto dinámico (usando 2.10.0-M3):Scala campo dinámico llamada x
import language.dynamics
object D extends Dynamic {
def selectDynamic(field : String) = Symbol(field)
}
El siguiente funciona bien y como era de esperar
object DynamicTest extends App {
println(D.a)
}
impresión 'un
Pero, si trato de esto:
object DynamicTest extends App {
println(D.x)
}
Tengo errores desagradables:
[error] DynProb.scala:7: type mismatch;
[error] found : D.type
[error] required: ?{val x: ?}
[error] Note that implicit conversions are not applicable because they are ambiguous:
[error] both method any2Ensuring in object Predef of type [A](x: A)Ensuring[A]
[error] and method any2ArrowAssoc in object Predef of type [A](x: A)ArrowAssoc[A]
[error] are possible conversion functions from D.type to ?{val x: ?}
[error] println(D.x)
[error] ^
[error] one error found
¿Por qué x es tan especial? Estoy haciendo algo estúpido?
Ese es el problema: https://github.com/scala/scala/blob/master/src/library/scala/Predef.scala#L271 – Debilski
Por lo tanto, esencialmente tengo que vivir con eso hasta que la cosa se elimine realmente de la lib, no solo desaprobado. Vergüenza. Gracias por el puntero :-) – hughleat
He aquí un pensamiento: suponiendo que Dynamic primero intenta encontrar un nombre adecuado en el alcance antes de probar selectDynamic, etc. ¿Debería evitar los nombres en desuso también? – hughleat