self-type と extends の動作が異なる構成シナリオを考え出そうとしましたが、これまでのところ見つかりませんでした。基本的な例では常に、依存型のサブタイプである必要のないクラス/特性を必要としない自己型について話しますが、そのシナリオでも、自己型と拡張の間の動作は同じようです。
trait Fooable { def X: String }
trait Bar1 { self: Fooable =>
def Y = X + "-bar"
}
trait Bar2 extends Fooable {
def Y = X + "-bar"
}
trait Foo extends Fooable {
def X = "foo"
}
val b1 = new Bar1 with Foo
val b2 = new Bar2 with Foo
一方を使用する場合と他方を使用する場合に、構成されたオブジェクトの構成または機能のいくつかの形式が異なるシナリオはありますか?
更新 1:セルフタイピングなしでは不可能なことの例をありがとうございます。情報に感謝しますが、self と extends が可能であるが交換可能ではないコンポジションを本当に探しています。
更新 2:私が持っている特定の質問は、なぜさまざまな Cake パターンの例で、 extends の代わりに self-type を使用する必要があると一般的に述べられているのかということだと思います。拡張でうまく機能しないケーキパターンのシナリオをまだ見つけていません