2013-09-30 2 views
5

- その意味でScalaでは、代入演算子 "="はメソッド呼び出しですか? Scalaの本につき、 "Scalaでプログラミング" として

Scala is an object-oriented language in pure form: every value is an object and every operation is a method call. For example, when you say 1 + 2 in Scala, you are actually invoking a method named + defined in class Int.

、代入演算については、 "=" 演算子を使って何?それも方法ですか?それはすべてのクラスまたはすべてのクラスがそれを継承しなければならない共通のスーパークラス(たとえば、java.lang.Object?)に存在しなければならないからです。それとも、Scalaではすべての操作が実際にメソッド呼び出しであるとは限りませんか?

答えて

11

いいえ。代入演算子(=)は予約語です。また、以下のとおりです。

_:= => <から<:<%>:より包括的なリストについては

@#は§ 1.1を参照してください。 =に関する詳細は、§ 6.12.4に記載されています。

だから、それはメソッド呼び出しではありません。

+0

このリストでは、モジュロ(%)演算子も見つけるのは少し驚きです。私の意見では、+や - などの他の基本的な算術演算子に似ており、その意味でもメソッドであった可能性があります。 –

+3

@Sumit型パラメータの暗黙的な表示のための '%'ではなく '<%'の構文的な砂糖 – 4lex1v

+0

確かに、Alexlvを指摘してくれてありがとう。 –

13

少し追加jatin答えます。 =をメソッド呼び出しと見なすことができるケースが1つありますが、実際はそれは単なる構文的なものです。スカラ座、醜いvarの生活のOOの一部では、次のことを書くことができます。

class Test { 
    private var x0: Int = 0 
    def x = x0 
    def x_=(a: Int) = x0 = a 
} 

次にあなたがxに新しいint型を割り当てることができます。

scala> val t = new Test 
t: Test = [email protected] 

scala> t.x = 1 
t.x: Int = 1 

最後の行はt.x_=(1)に脱糖されます。この場合、構文的な砂糖を考慮すると、=がメソッド呼び出しであると言えるでしょう。

+0

** syntatic sugar **の意味は?スカラーコンパイラが魔法のことをやっているということですか? – null

+0

はい!それはコンパイラです。 @suud – Jatin

2

他の回答には、標準のScalaの正しいですが、=および他の制御構造メソッド呼び出しですScala-Virtualizedと呼ばれる変種があります。

+0

このプロジェクトがメインラインのScalaに統合されることを本当に嬉しく思っています。純粋なオブジェクト指向の観点からは、 'var'と' = 'の振る舞いを実装することができます。それは' if'や 'while'などです。 –

関連する問題