przypadku poniżej kodu, kiedy to rozumieć linearyzacji ekspresjiScala wieżowych cechy
nowy E o o D C B
jest E -> C -> B -> D. Tak więc nie powinni wyrażenie d.foo() w kodzie
poniżej oceniany jako ECBD zamiast CBDE. czego mi brakuje?
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
Zauważyłem, że jeśli mam klasy F jak poniżej
class F extends A with D with C with B{
override def foo() = "F" + super.foo()
}
i zrobić
new F().foo
drukuje "FCBD"
Wydaje się nieco niespójne mnie, ponieważ klasa F jest mieszana w taki sam sposób jak wyrażenie, ale ma inne zamówienie drukowania