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

时间:2012-04-06 08:35:25

标签: scala syntax setter getter

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) 

实际上。但是如果您对getter方法def id = _id发表评论,p.id = 2将导致编译错误,说

error: value key is not a member of Person 

有人可以解释为什么吗?

1 个答案:

答案 0 :(得分:8)

编译器是这样的,因为规范是这样说的。

请参阅第Scala Reference页。 86,§6.15作业。

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

  • 制作getter private
  • 使getter返回另一种类型
  • 使吸气剂“不可赎回”,例如像这样:def id(implicit no: Nothing)