特征是使用组合规则组成的.冲突必须手动解决,特征不会意外地覆盖具有相同名称的另一个方法.
Mixins由顺序组成,因此具有类似于多重继承的脆弱性问题.
为了进行良好的比较,并推断为什么特征是首选的,你可以查看特征论文(pdf).
从本质上讲,这就是Lukas Renggli所说的:
Traits成员组成一个类,不更改其继承层次结构.冲突必须由特征的用户明确解决.
Mixins被线性化为目标类的继承层次结构.如果存在冲突的成员,则声明它们的顺序决定了哪个成员被调用.这是脆弱的,因为它隐含地定义了合成的行为,并且类作者必须意识到潜在的冲突以及它们将如何影响结果类.
由于mixins被线性化,它们不会遭受多重继承的臭名昭着的" 钻石问题 ".因此,它们堆积的脆弱性是另一个问题,我将其称为" 红宝石问题 ",以保持宝石的比喻.由于与驼鹿有关的一些奇怪的原因,珍珠并没有描述问题以及红宝石.
在Newspeak中,所有课程都是mixins.以下是Gilad Bracha在Newspeak论坛中回答类似问题的一些片段:
Mixins本身并不是Newspeak的特色.也就是说,我们没有设计语言说,好吧,现在我们将添加mixins.Mixins自动从类嵌套和基于消息的语义中脱离出来.也就是说,如果您有虚拟课程,那么除非您实际禁止它们,否则您将拥有mixins....
特征试图解决混合素的感知问题.
- 几乎没有真正的经验表明这些感知到的问题是真实存在的.
- 特征被限制为无国籍.这简化了问题,但并未处理所有感兴趣的案例.事实上,现在有研究论文试图将状态添加到特征中.
特征完全被一个更普遍的模型所包含,我多年前在我的博士论文中设计过(如果你真的想深入研究,可以在我的网站上找到)....我想研究一下如何将这些组合器合并到Newspeak中....
| 归档时间: |
|
| 查看次数: |
2028 次 |
| 最近记录: |