2012-07-05 50 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' –

回答