Scala自我类型注释vs'with'mix in

时间:2013-01-31 19:05:48

标签: scala traits self-type

  

可能重复:
  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 =>
    ...
    }

我是从设计的角度问。

谢谢!

1 个答案:

答案 0 :(得分:4)

当您使用自我类型时,只有在与其混合的其他类型满足指定的自我类型时才约束trait。您没有获得正在定义的trait和声明的自我类型之间的继承关系。这意味着,作为一种孤立的静态类型,特征本身并不是可自行公开替代自我类型的。 (它被比作C ++私有继承,但它是一个弱类比。)