2016-10-15 7 views
4

私はScalaを学んでいますが、私はそれを理解するのが難しいです。私はチュートリアルの1つでいくつかのScalaコードを手に入れましたが、私はいくつかのことを理解することができません。スカラーで '_ ='とは何ですか?

これはコードです:

class Person(val id:Int, 
      var firstName:String, 
      var lastName:String, 
      private var _age:Int) { 
    // these methods are identical to what would be created by var in the constructor 
    def age = _age 
    def age_=(newAge:Int) = _age = newAage 
} 

val me = new Person(45,"Dave","Copeland",35) 
me.firstName = "David" 
me.age = 36 

私は理解していなかった。

  1. なぜ_age、なぜageを、特別なbenifitまたはプライベートとして理解するだけの慣習があります。

  2. 何が_=def age_=(newAge:Int) = _age = newAage これが何をしているか。

+3

http://dustinmartin.net/getters-and-setters-in-scala/ –

答えて

9

これは、Scalaでを宣言する方法です。

なぜ、_ageは年齢ではありませんが、プライベートとして理解するための特別なメリットや慣例があります。

ageは既にgetter宣言によって取得されているため、別の変数名が必要です。

_=def age_=(newAge: Int) = _age = newAgeとは何ですか。

これはセッターメソッドであることをコンパイラーに伝えるヒントです。外部的には、年齢はあなたがこのように呼び出すことができますプロパティとして公開されます。

val p = new Person(1, "a", "b", 10) 
p.age = 42 
println(p.age) 

あなたが明示的にage_=を呼び出しませんが、setterメソッドがまだ呼び出されます。ゲッターにも同じことが起こります。

関連する問題