类和模块之间的区别

时间:2020-03-06 14:54:16  来源:igfitidea点击:

我来自Java,现在我正在与Ruby进行更多的合作。

我不熟悉的一种语言功能是module。我想知道"模块"到底是什么,何时使用它,为什么要在"类"上使用"模块"呢?

解决方案

基本上,该模块无法实例化。当类包含模块时,将生成代理超类,该代理超类提供对所有模块方法以及类方法的访问。

一个模块可以包含在多个类中。模块不能被继承,但是此" mixin"模型提供了一种有用的"多重继承"类型。 OO纯粹主义者会不同意这种说法,但不要让纯洁妨碍完成工作。

(此答案最初链接到http:// www.rubycentral.com / pickaxe / classes.html,但是该链接及其域不再有效。)

第一个答案是好的,并给出了一些结构性的答案,但是另一种方法是考虑我们在做什么。模块是关于提供可在多个类中使用的方法的,这些方法将它们视为"库"(就像在Rails应用程序中看到的那样)。类是关于对象的。模块是关于功能的。

例如,身份验证和授权系统就是很好的模块示例。身份验证系统跨多个应用程序级别的类工作(用户已通过身份验证,会话管理身份验证,许多其他类将根据auth状态而有所不同),因此身份验证系统充当共享API。

当我们在多个应用程序之间共享方法时,我们也可能会使用模块(同样,这里的库模型很好)。