gpt4 book ai didi

inheritance - scala中的自类型继承

转载 作者:行者123 更新时间:2023-12-03 20:50:11 26 4
gpt4 key购买 nike

假设我有以下特征:

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 inherited ),但他们大多只是陈述问题并得出结论,没有太多解释和/或解决方案(如果存在)。

最佳答案

trait C extends B with A

不是唯一的解决方案。你也可以有
trait AA extends A
trait C extends B with AA

也就是继承 A的接口(interface)的所有东西被接受。如果你必须依赖具体的实现,你会选择 mixin;如果实现取决于用户,或者您有充分的理由不在特征中指定 mixin(例如,为了放松依赖问题),您可以将其设为自类型。

关于inheritance - scala中的自类型继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3421735/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com