加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读