Dan*_*owy 14 inheritance constructor scala
假设我有以下抽象类:
abstract class A (var is_happy : Boolean) {
def toggle_happiness();
}
Run Code Online (Sandbox Code Playgroud)
现在我想定义一个实现该toggle_happiness()方法的具体类:
class B (is_happy : Boolean) extends A (is_happy) {
def toggle_happiness() = {
is_happy = !is_happy
}
}
Run Code Online (Sandbox Code Playgroud)
Scala的编译器给了我:
error: reassignment to val
is_happy = !is_happy
^
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?我认为在我的类中is_happy引用了var由我的构造函数设置的.我和这个名字有冲突is_happy吗?
谢谢,丹
Aar*_*rup 14
看到这个问题.从本质上讲,斯卡拉认为你想分配给该构造函数的参数,is_happy而不是var,is_happy,这恰好具有相同的名称.一些解决方案是:
var抽象基类._is_happy).由于参数名称是构造函数/方法的公共API的一部分,因此这可能是不可取的.您很幸运,在您的情况下,在编译时检测到问题.当它未被发现时,此问题可能导致非常令人惊讶的运行时行为.
| 归档时间: |
|
| 查看次数: |
1308 次 |
| 最近记录: |