假设我具有以下特征:
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
正如预期的那样,如果我取消注释 self 类型注释,编译器会很高兴。
我认为很明显为什么 C 也需要这种 self 类型。我不明白为什么如果编译器已经知道它需要它,它为什么不能从 A “继承”它?
我认为当你使用具有复杂层次结构的 self 类型时,它可以减少冗长,特别是如果你混合一大堆特征,每个特征都有自己的 self 类型。
我想目前的行为可能有充分的理由,我只是找不到/弄清楚它是什么。
起初我认为它可能与 mixin 线性化有关,但在我看来它在这里不起作用(即使我有更多的特征与更复杂的自我类型混合)。
在某些情况下会引起歧义吗?如果是这样,为什么在没有歧义的情况下它不能工作?
还是与正确实施的一些困难有关?
我可以找到有关该主题的一些讨论(例如self type is not dedicated),但他们大多只是陈述问题并得出结论,没有太多解释和/或解决方案(如果存在)。