2012-07-05 14 views
9

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?

+0

Prova 'foo.baz() = 5'. – senia

+0

'errore: l'aggiornamento del valore non è un membro dell'unità; foo.baz() = 5' –

risposta

Problemi correlati