Tôi đã viết một đoạn mã nhỏ để kiểm tra khả năng đặc điểm động:động khác biệt đặc điểm từ Scala 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
}
}
Vấn đề là nó sẽ không biên dịch cả trong Scala 2,9 và 2,10 vì dòng thứ tư trong main
:
error: reassignment to val
foo.baz = 5
Nếu tôi nhận xét chuỗi này, 2,9 sẽ phàn nàn về dòng thứ hai:
error: not found: value x
foo.bar(x = 5)
Trong khi đó 2.10 sẽ biên dịch và chương trình sẽ tạo ra:
applyDynamic: bar
applyDynamicNamed: bar
selectDynamic: bar
Vì vậy, bây giờ tôi tự hỏi, nếu tôi đang làm một cái gì đó sai (có thể bỏ lỡ một số phụ thuộc)? Có sự khác biệt nào giữa Dynamic's trong Scala 2.9 và 2.10 không? Và có gì sai với foo.baz = 5
?
Thử 'foo.baz() = 5'. – senia
'lỗi: cập nhật giá trị không phải là thành viên của Đơn vị; foo.baz() = 5' –