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

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

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

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

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

    Таких возможностей нет, и маловероятно, что он будет добавлен в обозримом будущем.

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

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

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

    • у вас нет никаких ограничений при назначении имен вашим методам. Например, вы можете определить методы +, -, * и т. Д. Для classа.
    • мы должны также следовать де-факто «немодифицированным правилам» (с соблюдением правил приоритета правил Scala), упомянутых в предыдущем ответе ( https://stackoverflow.com/a/2922456 ) Томаса Юнга – это распространено для многих, если не для всех языков программирования , и абстрактная алгебра; нам не нужно переопределять приоритет оператора для a + b * c.

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

    Давайте будем гением компьютера.