gpt4 book ai didi

scala - 行为上的意外差异似乎是由于使用 private[this] 而不是 private

转载 作者:行者123 更新时间:2023-12-02 02:00:56 27 4
gpt4 key购买 nike

这两个类的行为不同;原因似乎与使用 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)[此]:

    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 似乎在计算 if 表达式之前获取 _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

最佳答案

这是一个已知错误,即 SI-6880 .

关于scala - 行为上的意外差异似乎是由于使用 private[this] 而不是 private,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32137282/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com