ho scritto un po 'di frammento di codice per testare le capacità dei tratti dinamici:dinamica differenza tratto da 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
}
}
Il problema è che non sarebbe compilare sia in Scala 2.9 e 2.10 a causa di la quarta linea in main
:
error: reassignment to val
foo.baz = 5
Se io commento questa stringa, 2.9 possa lamentare la seconda linea:
error: not found: value x
foo.bar(x = 5)
Intanto 2.10 sarebbe compilare e il programma produrrebbe:
applyDynamic: bar
applyDynamicNamed: bar
selectDynamic: bar
Così ora mi chiedo se sto facendo qualcosa di sbagliato (forse manca alcune dipendenze)? C'è differenza tra Dynamic in Scala 2.9 e 2.10? E cosa c'è che non va con lo foo.baz = 5
?
Prova 'foo.baz() = 5'. – senia
'errore: l'aggiornamento del valore non è un membro dell'unità; foo.baz() = 5' –