コード内のd.foo()は、CBDEの代わりにECBDに評価されます。Scalaのスタッカブル特徴
私は何が欠けていますか?
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
私はそれが少し矛盾しているようだ、私は
class F extends A with D with C with B{
override def foo() = "F" + super.foo()
}
以下のようなクラスFを持っており、
new F().foo
をすれば、それは "FCBD" を印刷していること
に気づきましたクラスFは式と同じ方法で混合されますが、印刷順序が異なります。