5

我读过很多教科书

在 Ruby 中,一个类只能是一个类的子类。然而,mixin 允许没有共同祖先的类共享方法。

在实践中,每当我需要实现多重继承时。我有使用Modules而不是混合。例如:

Module name_goes_here
  def method_name_goes_here
    .....
  end
end

然后,我只是将它们包含在一个类中

class MySubClass < MySuperClass
  include module_name
end

现在,我参考了多本关于 mixins 的 ruby​​ 书籍,然后突然间,所有这些书籍都开始谈论模块,但没有明确说明 mixins 和模块的关系是什么。

所以,问题是:模块 == ruby​​ 中的 mixins 吗?如果是,那么为什么。如果没有,那有什么区别?

PS:对不起,如果这是一个愚蠢的问题

4

2 回答 2

13

Mixins 是一种允许将一些代码注入到类中的语言概念。

这是在 Ruby 中通过include将 aModule作为参数的关键字实现的。

所以是的,在 Ruby 中,mixin 是用模块实现的。但是模块除了 mixin 之外还有其他用途。

例如,模块也可以用于命名你的类或封装实用程序函数以防止污染全局命名空间。

于 2012-06-11T13:39:48.693 回答
5

来自维基百科文章

在面向对象的编程语言中,mixin 是一个类,它提供了可以被子类继承或重用的特定功能,而不是用于实例化(生成该类的对象)。

所以是的,Ruby 中的模块提供了一种重用功能的方法,而无需实例化模块本身。我会说,“ruby 中的 mixins 是用模块实现的”,但不是“mixins 是模块,反之亦然”。

于 2012-06-11T13:38:17.327 回答