这两个班的表现不同;原因似乎与使用private[this]
声明而不是private
有关。有人可以解释一下原因吗?
private
:
class Person(
private var _age: Int
) {
if (_age < 0) { _age = 0 }
def age = _age
def age_=(newAge: Int) {
if (newAge > _age) { _age = newAge }
}
}
在REPL中,这表现为我对两个类的期望;也就是说,age
方法得到_age
,在构造期间已设置为适当的值:
scala> val person = new Person(-1)
person: Person = Person@200a570f
scala> person.age
res0: Int = 0
private[this]
:
class Person(
private[this] var _age: Int
) {
if (_age < 0) { _age = 0 }
def age = _age
def age_=(newAge: Int) {
if (newAge > _age) { _age = newAge }
}
}
在REPL中,person.age
似乎在评估_age
表达式之前取if
的值。但是,在使用setter之后,它可以正常工作:
scala> val person = new Person(-1)
person: Person = Person@6f75e721
scala> person.age
res0: Int = -1
scala> person.age = 0
person.age: Int = 0
scala> person.age
res1: Int = 0