Подтвердить что ты не робот

&& и || в Scala

так как нормальные операторы типа +,::, → и т.д. - все методы, которые могут быть перегружены, и вещи, о которых мне было интересно, если || и && также являются методами. Это теоретически могло бы работать, если бы это были методы в булевом объекте. Но если это так, почему что-то вроде

if (foo == bar && buz == fol)

возможно? Если компилятор читает справа налево, это вызовет && на панели вместо (foo == bar)

4b9b3361

Ответ 1

6.12.3 Операции Infix Оператор инфикса может быть произвольным идентификатор. Операторы Infix имеют приоритет и ассоциативность следующим образом:

Приоритет инфикса оператор определяется операторы первого символа. Персонажи перечислены ниже в порядке возрастания приоритета, с символами на одна и та же строка имеет тот же приоритет.

  • (все буквы)
  • |
  • ^
  • &
  • < >
  • =!
  • + -
  • */%
  • (все другие специальные символы)

То есть операторы, начинающиеся с буква имеет самый низкий приоритет, за которыми следуют операторы, начиная с '| И т.д.

Это единственное исключение из это правило, касающееся присвоения Операторы (§6.12.4). Приоритет оператор-ассистент такой же, как одно простое присваивание (=). Что является, оно ниже, чем приоритет любой другой оператор.

Это следует из объяснения ассоциативности и того, как все это объединяется в выражении с несколькими операторами. Scala Ссылка делает хорошее чтение.

Ответ 3

Эти два являются определенными методами в scala.