可能重复:
What is the difference between scala self-types and trait subclasses?
我无法理解以下两个代码块之间的区别:
// Trait B is mixed in and creates a dependency on it
trait A extends C with B {
...
}
// Trait B is put in scope and also creates a dependency on it
trait A extends C {
self: B =>
...
}
我是从设计的角度问。
谢谢!
答案 0 :(得分:4)
当您使用自我类型时,只有在与其混合的其他类型满足指定的自我类型时才约束trait
。您没有获得正在定义的trait
和声明的自我类型之间的继承关系。这意味着,作为一种孤立的静态类型,特征本身并不是可自行公开替代自我类型的。 (它被比作C ++私有继承,但它是一个弱类比。)