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) 

有效。但是如果你注释getter方法def id = _idp.id = 2会导致编译错误,说

error: value key is not a member of Person 

谁能解释为什么?

4

1 回答 1

8

编译器之所以如此,是因为规范是这样说的。

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

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

  • 制作吸气剂private
  • 使 getter 返回另一种类型
  • 使 getter “不可调用”,例如:def id(implicit no: Nothing)
于 2012-04-06T08:42:11.640 回答