所以Squeak / Pharo支持Traits和Newspeak有Mixins。有什么不同?特质没有instVars但Mixins有吗?
答案 0 :(得分:9)
使用构图规则组合特征。冲突必须手动解决,特征不会意外地覆盖另一个具有相同名称的方法。
Mixins由顺序组成,因此具有类似于多重继承的脆弱性问题。
答案 1 :(得分:9)
为了进行良好的比较以及为什么特征是首选的原因,您可以查看traits paper (pdf)。
从本质上讲,这是Lukas Renggli所说的:
Traits成员被组成一个类,并且不会更改其继承层次结构。冲突必须由特征的用户明确解决。
Mixins被线性化为目标类的继承层次结构。如果存在冲突的成员,则声明它们的顺序决定了哪个成员被调用。这是脆弱的,因为它隐含地定义了合成的行为,并且类作者必须意识到潜在的冲突以及它们将如何影响结果类。
由于mixins被线性化,因此它们不会遭受多重继承的臭名昭着的“钻石问题”。所以它们堆积的脆弱性是另一个问题,我将其称为“红宝石问题”,以保持宝石的比喻。由于与moose有关的一些奇怪的原因,珍珠并没有描述问题以及红宝石。
答案 2 :(得分:8)
在Newspeak中,所有课程都是mixins。以下是Gilad Bracha对Newspeak discussion forum中类似问题的回答的一些片段:
Mixins不是Newspeak的功能 本身。也就是说,我们没有设计 语言说,好的,现在我们将添加 混入。 Mixins会自动脱落 从类嵌套和基于消息 语义。也就是说,如果你有 虚拟课,你有mixins 除非你真的禁止他们。 ......
Traits试图解决感知问题 mixins的问题。
- 很少有真实的经验表明这些 感知问题是真实的。
- 特征被限制为无国籍。这简化了事情, 但不处理所有的情况 利益。事实上,现在有 试图添加的研究论文 国家特质。
醇>特征完全归入更多 一般模型,我设计了很多 几年前在我的博士论文(可用 离开我的网站,如果你真的想 深挖)。 ... 我想研究一下我们的意愿 将这些组合器纳入其中 新话。 ...