我正在尝试调试scala程序 . 我发现了一个特征,其行为与以下类似:
trait A {
val a: Int = b
val b: Int = a
}
class B extends A
如果我们看一下这个特性,就会有循环分配 . val
b
甚至未定义,但在 val
a
的定义中使用 .
上面的程序编译成功 . a
和 b
都是 zero
. 我尝试使用变量类型字符串,然后值为 null
.
有一个第三类覆盖 val a
类似于以下
class C extends A {
override val a: Int = 10
}
现在,如果创建了类 C
的实例,则值 a
为10但 val
的 val
仍为 0
.
最后,我进一步检查,而不是覆盖类的主体,当我在构造函数参数中覆盖它类似于以下内容:
class D(override val a: Int) extends A
val d = new D(10)
然后将 d.a
和 d.b
初始化为10 .
我想明白:
特质A中val的定义如何有效?换句话说,scala如何解释特征A中的val赋值当在scala类的主体中覆盖特征中定义的val时,如果在特征中使用相同的val,则在特征体中使用什么值?别处