6

Scalaプログラマーは、この種の記述を知っているはずです。

class Person{
   var id  = 0 
}
var p = new Person 
p.id 
p.id = 2    

に等しい

class Person{
private var _id = 0 
def id = _id
def id_=(i: Int) = _id = i
}
val p = new Person 
p.id // be equal to invoke id method of class Person
p.id = 2   // be equal to p.id_=(2) 

事実上。def id = _idしかし、getterメソッドにコメントp.id = 2すると、コンパイルエラーが発生します。

error: value key is not a member of Person 

誰かが理由を説明できますか?

4

1 に答える 1

8

仕様がそう言っているので、コンパイラはそうです。

Scalaリファレンスを参照してください。86、§6.15割り当て。

次のことを妨げるものは何もないことに注意してください。

  • ゲッターを作るprivate
  • ゲッターに別のタイプを返すようにする
  • ゲッターを「呼び出し不能」にする、たとえば次のようにします。def id(implicit no: Nothing)
于 2012-04-06T08:42:11.640 に答える