web-dev-qa-db-ja.com

Scalaの=と:=の違いは何ですか?

違いは何ですか =および:= Scalaで?

私は「scalacolon-equals」を広範囲にグーグルで検索しましたが、決定的なものを見つけることができませんでした。

49
Jay Taylor

= in scalaは、実際の代入演算子です。これは、ほとんどの場合、制御できない特定の操作をいくつか実行します。

  • 作成時にvalまたはvarに値を与える
  • varの値を変更する
  • クラスのフィールドの値を変更する
  • タイプエイリアスの作成
  • おそらく他の人

:=は組み込みの演算子ではありません。誰でもオーバーロードして、好きなように定義できます。 :=を使用するのが好きな理由は、それが非常に割り当てられているように見え、他の言語で代入演算子として使用されているためです。

したがって、使用している特定のライブラリで:=が何を意味するのかを調べようとしている場合は、Scaladocs(存在する場合)で:=という名前のメソッドを探すことをお勧めします。

79
Owen

マーティン・オーダスキーから:

  • 最初は、Pascal、Modula、Adaと同じように、割り当てにcolon-equalsがあり、1つの等号は平等。多くのプログラミング理論家は、それが正しい方法であると主張するでしょう。割り当ては平等ではないため、割り当てには別の記号を使用する必要があります。しかし、それから私はJavaから来た何人かの人々とそれを試しました。私が得た反応は、「まあ、これは面白い言語のように見えます。しかし、なぜcolon-equalsと書くのですか?それは何ですか?」でした。そして、パスカルでもそうだと説明しました。彼らは、「今は理解しているが、なぜあなたがそうすることを主張するのか理解できない」と述べた。それから私はこれが私たちが主張したかったものではないことに気づきました。 「割り当てに等号ではなくコロン等号を書くので、より良い言語があります」とは言いたくありませんでした。それはまったくマイナーな点であり、人々はどちらのアプローチにも慣れることができます。それで、私たちが違いを生み出したい他の場所があったとき、私たちはこれらのマイナーなことで慣習と戦わないことに決めました

from Scalaのデザインの目標

54
tolitius

=割り当てを実行します。 :=は、標準ライブラリまたは言語仕様で定義されていません。必要に応じて、他のライブラリやコードで自由に使用できる名前です。

5
Rex Kerr

Scalaでは、演算子のオーバーロードが可能であり、メソッドを作成するのと同じように演算子の動作を定義できます。

他の言語と同様に、=は代入演算子です。

これは、私が知っている:=という標準の演算子ではありませんが、この名前で定義できます。このような演算子を見つけた場合は、見ているもののドキュメントを確認するか、その演算子が定義されている場所を検索する必要があります。

たくさん Scala演算子で実行できます。基本的に、好きな文字で演算子を作成できます。

5
thomasrutter