web-dev-qa-db-ja.com

Scalaでの演算子の優先順位

Scalaによる演算子の優先順位の提案は気に入っていますが、メソッドの名前付けに制限があるため、変更されていないルールが不便な場合があります。 Scalaでクラス/ファイルなどに別のルールを定義する方法はありますか?そうでない場合、それは将来的に解決されますか?

48
Jeriho

演算子の優先順位は、演算子の最初の文字によって Scalaリファレンス-6.12.3中置演算 で修正されています。優先順位の高い順にリストされています。

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

そして、それが変わる可能性はあまりありません。それはおそらくそれが修正するより多くの問題を作成します。通常の演算子の優先順位を使用している場合、1つのクラスでそれを変更するとかなり混乱します。

100
Thomas Jung

Scalaでクラス/ファイルなどに別のルールを定義する方法はありますか?そうでない場合、それは将来的に解決されますか?

そのような能力はなく、予見可能な将来に追加される可能性はほとんどありません。

8
Randall Schulz

機能リクエストtypelevel fork of the scala compiler で発生しました。これは、実験的機能を「プレビュー」するコンパイラのバージョンです。開発者は、誰かが [〜#〜] sip [〜#〜] と書いた場合、実装を検討するよう提案しました。

しかし、現在の状態では、優先順位を上書きする方法はありません。ルールは 言語仕様 で正式に定義されています。

2
Luciano

メソッドの命名に制限があるため、変更されていないルールは不便かもしれません

  • メソッドの命名に制限はありません。たとえば、クラスのメソッド+、-、*などを定義できます。
  • また、前の回答で述べたデファクトの「変更されていないルール」(Scala演算子の優先ルールによって実施))に従う必要があります( https://stackoverflow.com/a/2922456 =)by Thomas Jung-すべてではないにしても多くのプログラミング言語と抽象代数に共通です; a + b * cの演算子の優先順位を再定義する必要はありません。

「Rational」クラスの例については、本の第6章 http://www.scala-lang.org/docu/files/ScalaByExample.pdf を参照してください。

0
Fuad Efendi