Приоритет оператора в Scala
Мне нравится предложение Scala о приоритете операторов, но в некоторых редких случаях неизмененные правила могут быть неудобны, потому что у вас есть ограничения в именовании ваших методов. Существуют ли способы определения других правил для класса / файла и т. Д. В Scala? Если нет, будет ли это решено в будущем?
4 ответа
Приоритет оператора зафиксирован в Справочнике Scala - 6.12.3 Операции с инфиксами по первому символу в операторе. Перечислено в порядке возрастания приоритета:
(all letters)
|
^
&
= !
< >
:
+ -
* / %
(all other special characters)
И не очень вероятно, что это изменится. Это, вероятно, создаст больше проблем, чем исправит. Если вы используете обычный операторный приоритет, изменение его для одного класса будет довольно запутанным.
Нет такой способности, и есть небольшая вероятность того, что она будет добавлена в обозримом будущем.
Был запрос на добавление функции в форке уровня уровня компилятора scala, версии компилятора, которая "просматривает" экспериментальные функции. Разработчики предположили, что если кто-то и напишет для этого SIP, его можно рассмотреть для реализации.
Но в его текущем состоянии нет способа переопределить приоритет. Это правила формально определены в спецификации языка.
неизмененные правила могут быть неудобны, потому что у вас есть ограничения в именовании ваших методов
- у вас нет никаких ограничений в именовании ваших методов. Например, вы можете определить методы +, -, * и т. Д. Для класса.
- мы также должны де-факто следовать "неизмененным правилам" (применяемым правилами приоритетов операторов Scala), упомянутым в предыдущем ответе ( /questions/31527922/prioritet-operatora-v-scala/31527927#31527927) Томаса Юнга - это характерно для многих, если не для всех языков программирования и абстрактная алгебра; нам не нужно переопределять приоритет оператора для a+b*c.
См. Главу 6 книги http://www.scala-lang.org/docu/files/ScalaByExample.pdf для примера класса "Rational".