【发布时间】:2011-05-01 07:51:13
【问题描述】:
据说,Matz 说过“mixin 几乎可以完成多重继承所做的所有事情,而没有相关的缺点”(Matz 的话)。”
首先,为什么 Ruby 模块包含不是“多重继承”?在我看来,模块和类之间几乎没有区别。当模块用作超类时,您无法实例化模块这一事实无关紧要。
我还知道,连续的模块包含形成了一个从类向上延伸的单一继承链(不是树)。但是,对我来说,这不足以将它与“多重继承”区分开来,因为 Python 多重继承系统也“线性化”了超类链(使用 C3 algorithm),只是 Ruby 的“线性化”过程要简单得多。
那么,在像 Python 这样的语言中,Ruby 模块 mixins 与多重继承的确切区别是什么?为什么 Python 采用 c3 MRO 算法背后的论点不适用于 Ruby?如果它们确实适用 - 为什么 Ruby 决定不采用这种算法?
谢谢
【问题讨论】:
-
这是一篇很好的文章,看看它是否回答了你的问题:artima.com/weblogs/viewpost.jsp?thread=246488
-
@Mladen 这真是太棒了....如果您将其添加为正确答案,我将“接受”它:)
标签: ruby multiple-inheritance mixins