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
有什麼問題?
嘗試'foo.baz()= 5'。 – senia
'錯誤:值更新不是單位的成員; foo.baz()= 5' –