我喜欢Scala对运算符优先级的建议,但在一些极少数情况下,未修改的规则可能不方便,因为您在命名方法时有限制。有没有方法在Scala中为类/文件等定义另一个规则?如果没有,将来会解决吗?Scala中的运算符优先级
回答
操作员的优先级在Scala Reference - 6.12.3 Infix Operations中由操作员的第一个字符固定。按优先级递增顺序列出:
(all letters)
|
^
&
= !
< >
:
+ -
*/%
(all other special characters)
而且它不太可能会改变。它可能会产生比修复更多的问题。如果使用正常运算符优先级,则将其更改为一个类将会相当混乱。
@huynhjl来自引用的参考文献:“这个规则有一个例外,它涉及到赋值运算符(§6.12.4)。赋值运算符的优先级与简单赋值(=)的优先级相同,也就是说,它低于任何其他运算符的优先级“。 §6.12.4将分配操作符描述为以“=”结尾的操作符。所以上面的列表是不完整的,而不是不正确的。 – 2011-09-29 14:35:16
@Luigi Plinge,'==='不是赋值运算符,因为有一个例外:以'='结尾的运算符是赋值运算符*,除非运算符也以等号字符*开头。看看这个人道主义的线索和另一个环节,Martin本人表示SLS需要更新。我看不到更新。 – huynhjl 2011-09-29 15:14:04
我认为决定让所有字母成为最弱的一个是奇怪的:'a contains b || c包含d',我认为这是一个频繁的构造,需要括号...... – 2014-02-16 23:23:58
没有这种能力,在可预见的未来几乎没有可能性。
未修改规则可能是不方便的,因为你在命名你的方法
- 你没有命名你的方法的任何限制有限制。例如,您可以为类定义方法+, - ,*等。
- 我们还必须遵循Thomas Jung先前回答(https://stackoverflow.com/a/2922456)中提到的事实上的“未经修改的规则”(由Scala运算符优先规则强制执行) - 这对许多(如果不是所有的)编程语言和抽象代数是很常见的;我们不需要重新定义a + b * c的运算符优先级。
有关“Rational”类示例,请参阅书http://www.scala-lang.org/docu/files/ScalaByExample.pdf的第6章。
typelevel fork of the scala compiler中有一个feature request,这是编译器的一个版本,可以“预览”实验性功能。开发人员建议,如果有人为此编写SIP,可能会考虑实施。
但是在当前状态下,没有办法覆盖优先级。规则在language specification中正式定义。
- 1. Prolog运算符优先级
- 2. C++运算符优先级
- 3. JavaScript运算符优先级
- 4. php运算符优先级
- 5. PHP:运算符优先级
- 6. Python运算符优先级
- 7. 运算符优先级
- 8. RethinkDB运算符优先级
- 9. C运算符优先级
- 10. 运算符优先级
- 11. Haskell中的运算符优先级
- 12. javascript中的运算符优先级
- 13. Python中的运算符优先级-PEMDAS
- 14. && JavaScript中的运算符优先级
- 15. 指向运算符的优先级
- 16. Perl5的=(等于)运算符优先级
- 17. 欺骗Python的运算符优先级
- 18. And和Or的运算符优先级
- 19. Java模运算符的优先级
- 20. shell运算符的优先级
- 21. 括号内的运算符优先级
- 22. C++运算符的优先级
- 23. 运算符优先级的PHP
- 24. 信息冲突运算符优先级
- 25. 红宝石运算符优先级表
- 26. 更改运算符优先级为∘
- 27. C++和运算符优先级
- 28. Laravel多WHERE()运算符优先级
- 29. 三元运算符优先级
- 30. 布尔运算符优先级
相关邮件列表主题:http://scala-programming-language.1934581.n4.nabble.com/More-unicode-alternatives-for-ASCII-operators-td2008146.html – retronym 2010-05-27 19:53:29