2012-07-05 42 views
9

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?

+0

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

+0

'error: la actualización de valor no es miembro de la Unidad; foo.baz() = 5 ' –

Respuesta

Cuestiones relacionadas