对于代码下面我理解表达的线性化Scala的可堆叠性状
全新E与d与下用乙
为E - “ç - >乙 - > D.所以然后不应该表达代码中的d.foo()
以下评估为ECBD而不是CBDE。我错过了什么?
trait A {
def foo(): String = ""
}
trait B extends A {
abstract override def foo() = "B" + super.foo()
}
trait C extends B {
abstract override def foo() = "C" + super.foo()
}
trait D extends A {
abstract override def foo() = "D" + super.foo()
}
class E extends A{
override def foo() = "E"
}
var d = new E with D with C with B;
d.foo() //prints CBDE
我注意到,如果我有一个F级类似下面
class F extends A with D with C with B{
override def foo() = "F" + super.foo()
}
,做
new F().foo
它打印 “FCBD”
这似乎有点不一致我因为F类与表达方式混合在一起,但具有不同的打印顺序