scala – 意外的行为差异似乎是由于使用私有[this]而不是私有的
发布时间:2020-12-16 09:11:09 所属栏目:安全 来源:网络整理
导读:这两个类的行为不一样;原因似乎与使用私人[这]声明而不是私人有关.有人可以解释为什么吗? 私人: class Person( private var _age: Int) { if (_age 0) { _age = 0 } def age = _age def age_=(newAge: Int) { if (newAge _age) { _age = newAge } }} 在REP
这两个类的行为不一样;原因似乎与使用私人[这]声明而不是私人有关.有人可以解释为什么吗?
>私人: 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,在施工期间已被设置为适当的值: scala> val person = new Person(-1) person: Person = Person@200a570f scala> person.age res0: Int = 0 >私人[这]: 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中,在评估if表达式之前,person.age似乎取值为_age.尽管如此,使用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 解决方法
这是一个已知的bug,即
SI-6880.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |