Почему Scala изменил относительный приоритет операторов сравнения по сравнению с Java (по сравнению с Java)? - PullRequest
7 голосов
/ 11 августа 2011

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

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

1 Ответ

14 голосов
/ 11 августа 2011

Это не обратное в 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))

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...