这两个类的行为不同; 原因似乎与使用private[this]声明而不是a相关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 }
}
}
Run Code Online (Sandbox Code Playgroud)
在REPL中,这表现为我对两个类的期望; 也就是说,age方法获取_age,在构造期间已设置为适当的值:
scala> val person = new Person(-1)
person: Person = Person@200a570f
scala> person.age
res0: Int = 0
Run Code Online (Sandbox Code Playgroud)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 }
}
}
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
173 次 |
| 最近记录: |