运算符优先级在Scala中

我喜欢Scala对运营商优先级的build议,但在一些极less数情况下,未经修改的规则可能不方便,因为在命名方法方面有限制。 有什么方法可以在Scala中为类/文件等定义另一个规则吗? 如果不是,将来会解决吗?

运算符优先级在Scala参考手册 – 6.12.3中缀运算中由操作符中的第一个字符固定。 按优先级顺序排列:

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

它不太可能会改变。 它可能会产生比修复更多的问题。 如果你使用正常的运算符优先级,改变它为一个类将是相当混乱。

没有这样的能力,在可预见的将来增加的可能性很小。

未经修改的规则可能不方便,因为您在命名方法方面有限制

  • 您在命名方法时没有任何限制。 例如,您可以为类定义方法+, – ,*等。
  • 我们还必须遵循Thomas Jung先前回答( https://stackoverflow.com/a/2922456 )中提到的事实上的“未经修改的规则”(通过Scala运算符优先级规则强制执行) – 很多(如果不是所有的编程语言,抽象代数; 我们不需要重新定义a + b * c的运算符优先级。

有关“Rational”类示例,请参见http://www.scala-lang.org/docu/files/ScalaByExample.pdf一书的第6章。;

在scala编译器的typelevel fork中提出了一个特性请求 ,这个编译器的一个版本“预览”实验性特性。 开发人员build议,如果有人为此写了一个SIP ,可以考虑实施。

但在目前的状态下,没有办法覆盖优先权。 规则在语言规范中正式定义。