Приоритет оператора в Scala

Мне нравится Scala предлагать приоритет оператора, но в некоторых редких случаях немодифицированные правила могут быть неудобными, потому что у вас есть ограничения в присвоении имен вашим методам. Существуют ли способы определения других правил для класса/файла и т.д. В Scala? Если нет, будет ли он разрешен в будущем?

Ответы

Ответ 1

Приоритет оператора фиксируется в Scala Reference - 6.12.3 Infix Operations первым символом оператора. Перечислены в порядке возрастания приоритета:

(all letters)
|
^
&
= !
< >
:
+ -
* / %
(all other special characters)

И это не очень вероятно, что это изменится. Вероятно, это создаст больше проблем, чем исправляет. Если вы используете, то нормальный приоритет оператора, изменяющий его для одного класса, будет довольно запутанным.

Ответ 2

Нет такой способности, и маловероятно, что она будет добавлена ​​в обозримом будущем.

Ответ 3

Был запрос поднятый в типуровневой вилки компилятор scala, версия компилятора, которая "просматривает" экспериментальные функции. Разработчики предположили, что если кто-то должен был написать SIP для этого, это может быть рассмотрено для реализации.

Но в этом текущем состоянии нет возможности переопределить приоритет. Эти правила формально определены в спецификации .

Ответ 4

немодифицированные правила могут быть неудобными, потому что у вас есть ограничения в наименовании ваших методов.

  • У вас нет никаких ограничений при написании ваших методов. Например, вы можете определить методы +, -, * и т.д. Для класса.
  • мы должны также следовать де-факто "немодифицированным правилам" (соблюдаемые правилами Scala правила приоритета оператора), упомянутые в предыдущем ответе (fooobar.com/info/1550/...) Томаса Юнга - это распространено для многих, если не для всех языков программирования, и для абстрактной алгебры; нам не нужно переопределять приоритет оператора для a + b * c.

См. главу 6 книги http://www.scala-lang.org/docu/files/ScalaByExample.pdf для примера класса Rational.