2012-07-05 51 views
9

我写的一小段代码来测试动态特性功能:动态特性的差异,从斯卡拉2.9至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 
    } 
} 

的问题是,它不会在两者斯卡拉2.9和2.10,因为编译在main第四行:

error: reassignment to val 
foo.baz = 5 

如果我评论此字符串,2.9会抱怨下联:

error: not found: value x 
foo.bar(x = 5) 

同时将2.10编译程序将产生:

applyDynamic: bar 
applyDynamicNamed: bar 
selectDynamic: bar 

所以,现在我不知道我做错了什么(也许会错过一些依赖)?在Scala 2.9和2.10中,Dynamic有没有区别?那么foo.baz = 5有什么问题?

+0

尝试'foo.baz()= 5'。 – senia

+0

'错误:值更新不是单位的成员; foo.baz()= 5' –

回答