我喜歡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