繁体   English   中英

Scala中的运算符优先级

[英]Operator precedence in Scala

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

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM