2011-08-11 16 views
7

Java'da, <, =='dan daha yüksek önceliğe sahiptir. Scala'da tersi. Scala halkının neden bu şekilde seçtiğini merak ediyorum. Diğer ikili operatör öncelikleri Java ile hizalanır (exwise bitwise ops, ancak bunlar için neden özel bir öneri vermedikleri anlaşılabilir).Scala, ilişkisel ve eşitlik operatörlerinin göreli önceliğini neden değiştirdi (Java ile karşılaştırıldığında)?

GÜNCELLEME: Aslında, dil özelliğinde bir hataydı, '<' aslında Scala'daki '==' değerinden daha yüksek önceliğe sahip.

cevap

14

Scala'da ters çevrilmiyor. Bu deneyin:

val what = 5 == 8 < 4 

Ben derleme zamanı uyarı olsun: comparing values of types Boolean and Int using `==' will always yield false; Bu nedenle, derleyici, Java'da olduğu gibi bunu 5 == (8 < 4)'a çevirmiştir.

Sen de bu deneyebilirsiniz: nerede öncelik o

Eğer bir örnek verebilir (foo === ((foo <<< foo) >>> foo)) olarak ayrıştırıldı Anlamı

<<< 
>>> 
=== 

:

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

def foo = new Foo 

Sonra foo === foo <<<foo>>> foo baskılar bu çağıran ters çevrildi?

+1

Scala dil referansı, bölüm 6.12.3 – Aivar

+1

'dan okudum O zaman belki bir yazım hatası mı?… Referansla çelişmeye cesaret edemem, ama bu iki testten, '<' ile başlayan yöntemler yöntemlerden daha yüksek önceliğe sahiptir infix notasyonunda kullanıldığında '=' ile başlayan (Scala 2.8.1'de). –

+0

Genişletilmiş örnek için teşekkürler - referansta yazım hatası var gibi görünüyor. Operatör önceliklerini farklı dillerde karşılaştırdım, bu yüzden fark ettim. – Aivar

İlgili konular