Мне нравится 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.