He escrito un pequeño fragmento de código para probar las capacidades de rasgos dinámicos:diferencia rasgo dinámico de Scala 2.9 a 2.10
class Foo extends Dynamic {
def selectDynamic(name: String) {
println("selectDynamic: " + name)
}
def applyDynamic(name: String)(args: Any*) {
println("applyDynamic: " + name)
}
def applyDynamicNamed(name: String)(args: (String, Any)*) {
println("applyDynamicNamed: " + name)
}
def updateDynamic(name: String)(value: Any) {
println("updateDynamic: " + name)
}
}
object Test {
def main(args: Array[String]) {
val foo = new Foo
foo.bar(5) //1
foo.bar(x = 5) //2
foo.bar //3
foo.baz = 5 //4
}
}
El problema es que no sería compilar tanto en Scala 2.9 y 2.10 debido la cuarta línea en main
:
error: reassignment to val
foo.baz = 5
Si comento esta cadena, 2.9 se queja de la segunda línea:
error: not found: value x
foo.bar(x = 5)
Mientras tanto
2.10 compile y el programa produciría:
applyDynamic: bar
applyDynamicNamed: bar
selectDynamic: bar
Así que ahora me pregunto si estoy haciendo algo mal (tal vez se pierda algunas dependencias)? ¿Hay alguna diferencia entre Dynamic en Scala 2.9 y 2.10? ¿Y qué pasa con el foo.baz = 5
?
Try 'foo.baz() = 5'. – senia
'error: la actualización de valor no es miembro de la Unidad; foo.baz() = 5 ' –