2011-10-11 33 views
5

Trong đoạn mã sau, tôi nhận được một lỗi biên dịch nói rằng tôi có một loại không phù hợp trên 'x':Auto-unboxing tại Scala mô hình trận đấu

val someRef: java.lang.Long = 42L 
someRef match { 
    case x: Long => println("The answer: " + x) 
    case _ => println("Unknown") 
} 

Làm thế nào để tôi nhận được Scala để tự động Unbox someRef trong câu lệnh đối sánh?

Trả lời

11

Hệ thống kiểu không biết về quyền anh ở cấp độ này. Nhưng nó không biết rằng nếu có một Any, một đóng gói Long thực sự (có lẽ) được cho là chỉ là một Long (từ phần AnyVal của cây kế thừa lớp). Vì vậy:

val someRef: java.lang.Long = 42L 
(someRef: Any) match { 
    case x : Long => println("The answer is " + x) 
    case _ => println("What answer?") 
} 
+0

Điều đó đã xảy ra. Cảm ơn. – Ralph