每个"setter"方法都需要Scala中的"getter"方法?

爱国者*_*爱国者 6 syntax getter setter scala

Scala程序员应该知道这种写法:

class Person{
   var id  = 0 
}
var p = new Person 
p.id 
p.id = 2    
Run Code Online (Sandbox Code Playgroud)

等于

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) 
Run Code Online (Sandbox Code Playgroud)

有效.但是如果你评论getter方法def id = _id,p.id = 2会导致编译错误,说

error: value key is not a member of Person 
Run Code Online (Sandbox Code Playgroud)

谁有人解释为什么?

Jea*_*let 8

编译器是这样的,因为规范说明了这一点.

请参见第22页的Scala参考.86,§6.15作业.

请注意,没有什么能阻止您:

  • 制造吸气剂 private
  • 使得getter返回另一种类型
  • 使得getter"不可召唤",例如: def id(implicit no: Nothing)