Scala中的运算符优先级

时间:2010-05-27 15:12:58

标签: scala operator-precedence

我喜欢Scala提出的运算符优先级,但在极少数情况下,未经修改的规则可能不方便,因为您在命名方法时有限制。有没有办法为Scala中的类/文件等定义另一个规则?如果没有,将来会解决吗?

4 个答案:

答案 0 :(得分:99)

运算符优先级在Scala Reference - 6.12.3 Infix Operations中由运算符中的第一个字符固定。按优先顺序列出:

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

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

答案 1 :(得分:7)

  

有没有办法在Scala中为类/文件等定义另一个规则?如果没有,将来会解决吗?

没有这种能力,在可预见的未来几乎不可能加入。

答案 2 :(得分:2)

feature request中引发了typelevel fork of the scala compiler,这是编译器的一个版本,预览&#39;实验性特征。开发人员建议,如果有人为此编写SIP,可能会考虑实施。

但是在它的当前状态下,没有办法覆盖优先权。它的规则在language specification中正式定义。

答案 3 :(得分:0)

  

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

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

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