我试图提出一个组合场景,其中 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:我想我的特定问题是为什么各种蛋糕模式示例通常都在谈论必须使用自我类型而不是扩展。我还没有找到一个蛋糕模式场景不能和扩展一样好用