2012-07-05 23 views
9

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?

+0

Thử 'foo.baz() = 5'. – senia

+0

'lỗi: cập nhật giá trị không phải là thành viên của Đơn vị; foo.baz() = 5' –

Trả lời

Các vấn đề liên quan