Приоритет оператора в 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".

Другие вопросы по тегам