假设我有以下特点:
trait A
trait B { this: A => }
trait C extends B // { this: A => }
编译错误:
illegal inheritance; self-type C does not conform to B's selftype B with A
如果我取消注释自类型注释,编译器就会很高兴地通过,这是意料之中的。
我认为为什么C也需要这个自类型显而易见。但我不明白为什么它不能从A那里“继承”,如果编译器已经能够确定它是必需的?
我认为在使用具有复杂层次结构的自类型时,它可以减少冗余,特别是如果您混合了大量特性,每个特性都有自己的自类型。
我猜也许有一个好的原因解释当前的行为,只是我找不到/弄清楚是什么。
起初,我以为它可能与混入线性化有关,但在我混入更多特性和更复杂的自类型的情况下,它似乎对我没有影响。
在某些情况下会导致歧义吗?如果是这样,为什么不能在没有歧义的情况下工作?
还是与正确实现相关的一些困难有关?
我可以找到一些关于这个主题的讨论(例如self type is not inherited),但它们大多只是陈述问题,并得出这就是现状,没有太多的解释和/或解决方案(如果存在)。
A
时,该怎么办?我认为这会让人困惑,应该明确继承和混合。此外,当你想要节省打字时,你可以定义一个trait CA extends C with A
并使用它。 - Debilski