2011-08-11 23 views
7

Trong Java, < có mức độ ưu tiên cao hơn ==. Ở Scala thì ngược lại. Tôi tự hỏi tại sao người Scala lại chọn cách đó? Các tiền tố toán tử nhị phân khác phù hợp với Java (exept bitwise ops, nhưng có thể hiểu được lý do tại sao chúng không đưa ra các ưu tiên đặc biệt cho những cái này).Tại sao Scala thay đổi mức độ ưu tiên tương đối của các toán tử quan hệ so với bình đẳng so với Java?

CẬP NHẬT: Đó thực sự là một sai lầm trong thông số ngôn ngữ, '<' có ưu tiên cao hơn '==' trong Scala.

Trả lời

14

Nó không bị đảo ngược trong Scala. Hãy thử điều này:

val what = 5 == 8 < 4 

Tôi nhận được cảnh báo biên dịch thời gian: comparing values of types Boolean and Int using `==' will always yield false; vì vậy rõ ràng là trình biên dịch đã dịch này sang 5 == (8 < 4), giống như trong Java.

Bạn có thể thử này, quá:

class Foo { 
    def ===(o: Foo) = { println("==="); this } 
    def <<<(o: Foo) = { println("<<<"); this } 
    def >>>(o: Foo) = { println(">>>"); this } 
} 

def foo = new Foo 

Sau đó gọi foo === foo <<<foo>>> foo in này:

<<< 
>>> 
=== 

Có nghĩa là nó đã được phân tích cú pháp như (foo === ((foo <<< foo) >>> foo))

Bạn có thể cung cấp một ví dụ nơi ưu tiên được đảo ngược?

+1

Tôi đọc nó từ tài liệu tham khảo ngôn ngữ Scala, mục 6.12.3 – Aivar

+1

Sau đó có thể đó là lỗi đánh máy? ... Tôi không dám mâu thuẫn với Tài liệu tham khảo, nhưng từ hai thử nghiệm này, phương pháp bắt đầu bằng '<' có ưu tiên cao hơn so với phương pháp bắt đầu bằng '=' khi được sử dụng trong ký hiệu infix (trên Scala 2.8.1). –

+0

Cảm ơn ví dụ mở rộng - có vẻ như có lỗi đánh máy trong tài liệu tham khảo. Tôi đã so sánh các ưu tiên của toán tử bằng các ngôn ngữ khác nhau, đó là lý do tại sao tôi nhận thấy nó. – Aivar

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