對於代碼下面我理解表達的線性化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類與表達方式混合在一起,但具有不同的打印順序