首页 文章

模块== mixin in ruby?

提问于
浏览
5

我在很多教科书中都读过这篇文章

在Ruby中,类只能是一个类的子类 . 但是,Mixins允许没有共同祖先的类共享方法 .

在实践中,每当我需要实现多重继承时 . 我使用了 Modules 而不是mixins . 例如:

Module name_goes_here
  def method_name_goes_here
    .....
  end
end

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

class MySubClass < MySuperClass
  include module_name
end

现在,我已经提到了多个ruby书籍,每个人都在讨论mixins然后突然间,所有人都开始谈论模块,而没有说明mixins和模块的关系是什么 .

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

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

2 回答

  • 5

    Mixins是一种语言概念,允许将一些代码注入类中 .

    这是在Ruby中通过关键字 include 实现的,它将 Module 作为参数 .

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

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

  • 13

    来自wikipedia article

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

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

相关问题