gpt4 book ai didi

scala - 为什么我不能在 Scala 子类中分配给 var?

转载 作者:行者123 更新时间:2023-12-03 20:39:52 30 4
gpt4 key购买 nike

假设我有以下抽象类:

abstract class A (var is_happy : Boolean) {
def toggle_happiness();
}

现在我想定义一个具体的类来实现 toggle_happiness()方法:
class B (is_happy : Boolean) extends A (is_happy) {
def toggle_happiness() = {
is_happy = !is_happy
}
}

Scala 的编译器给了我:
error: reassignment to val
is_happy = !is_happy
^

这里发生了什么?我以为 is_happy引用 var在我的构造函数设置的类中。我和名字有冲突吗 is_happy ?

谢谢,

最佳答案

this question .本质上,Scala 认为您正在尝试分配给构造函数参数 is_happy ,而不是 var , is_happy ,恰好有相同的名称。一些解决方案是:

  • 制作 var基类中的抽象。
  • 重命名构造函数参数(例如 _is_happy )。由于参数名称是构造函数/方法的公共(public) API 的一部分,因此可能不建议这样做。

  • 您很幸运,在您的案例中,问题是在编译时检测到的。此问题可能导致 very surprising runtime behavior when it goes undetected .

    关于scala - 为什么我不能在 Scala 子类中分配给 var?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6656868/

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