Ben ifadenin lineerizasyon BScala istiflenebilir özellikleri kodu için
olan E ile C D
yeni E anlama aşağıdaki gibi Aşağıda,
kodundaki d.foo(), CBDE yerine ECBD'ye değerlendirilmiştir. Neyi kaçırıyorum?
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
ben aşağıda
class F extends A with D with C with B{
override def foo() = "F" + super.foo()
}
gibi bir sınıf F varsa ve eğer
new F().foo
o O biraz tutarsız görünüyor
"FCBD" yazdırır fark etmiş çünkü sınıf F ifadesiyle aynı şekilde karıştırılıyor ama farklı bir baskı siparişi var