在scala特征中递归调用`val`?

时间:2018-05-22 12:20:47

标签: scala

我正在尝试调试scala程序。我发现了一种与下列行为类似的特征:

trait A {
    val a: Int = b
    val b: Int = a
}

class B extends A

如果我们看一下这个特性,就会有循环分配。 val b甚至未定义,但在val a的定义中使用。

以上程序编译成功。 ab都是zero。我尝试使用变量类型字符串,然后值为null

有第三个类覆盖val a类似于以下

class C extends A {
    override val a: Int = 10
}

现在,如果创建了类C的实例,则值a为10,但val的{​​{1}}仍为b

最后,我进一步检查,而不是覆盖类的主体,当我在构造函数参数中覆盖它时类似于以下内容:

0

然后将class D(override val a: Int) extends A val d = new D(10) d.a初始化为10。

我想明白:

  
      
  1. d.bval的定义如何有效?换句话说,scala如何解释trait A

  2. 中的val作业   
  3. 当在scala类的主体中覆盖特征中定义的trait A时,如果在其他特征中使用相同的val,则在特征体中使用了什么值? / p>

  4.   

0 个答案:

没有答案