Почему Scala изменил относительный приоритет реляционных vs операторов равенства (по сравнению с Java)?

В Java, < имеет более высокий приоритет, чем ==. В Scala это наоборот. Интересно, почему люди Scala выбрали именно так? Другие приоритеты двоичных операторов совпадают с Java (кроме побитовых операций, но понятно, почему они не дали особых приоритетов для них).

ОБНОВЛЕНИЕ: на самом деле это ошибка в спецификации языка, '<' имеет более высокий приоритет, чем '==' в Scala.

Ответы

Ответ 1

Он не инвертируется в Scala. Попробуйте следующее:

val what = 5 == 8 < 4

Я получаю предупреждение во время компиляции: comparing values of types Boolean and Int using `==' will always yield false; так что, очевидно, компилятор перевел это на 5 == (8 < 4), как в Java.

Вы также можете попробовать:

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

def foo = new Foo

Затем вызов foo === foo <<< foo >>> foo печатает это:

<<<
>>>
===

Это означает, что он был проанализирован как (foo === ((foo <<< foo) >>> foo))

Можете ли вы привести пример, когда приоритет отменен?