我的问题类似于“Ruby中include和extend的区别是什么?”

Ruby中require和include的区别是什么?如果我只是想在我的类中使用模块中的方法,我应该要求它还是包含它?


当前回答

Ruby的require更像其他语言(比如C语言)中的“include”。它告诉Ruby你想引入另一个文件的内容。在其他语言中类似的机制有: 在c#中使用<namespace>指令。 在Java中导入<package>。 Ruby include是用于mixin的面向对象继承机制。

这里有一个很好的解释:

简单的答案是require和include本质上是不相关的。 “require”类似于C中的include,这可能会让新手感到困惑。 (一个显著的区别是所需文件中的局部变量“蒸发”了 当require完成时。) Ruby包含与C包含完全不同。include语句将一个模块“混合”到一个类中。这是有限形式 多重继承。一个被包含的模块字面上赋予了一个“is-a” 对事物的关系包括它。

重点补充道。

其他回答

如果你正在使用一个模块,这意味着你要把所有的方法都带入你的类中。 如果你用一个模块扩展一个类,这意味着你把模块的方法作为类方法“引入”了。 如果你在模块中包含了一个类,这意味着你将模块的方法作为实例方法“引入”了。

EX:

 module A
   def say
     puts "this is module A"
   end
 end

 class B
   include A
 end

 class C
   extend A
 end

B.say =>未定义的方法'说'的B:类

B.new.say 这是模块A

C.say 这是模块A

C.new.say =>未定义的方法'说' C:类

在Ruby元编程书中,

require()方法非常类似于load(),但它的目的是 不同的目的。您使用load()来执行代码,并且使用 Require()导入库。

Ruby的require更像其他语言(比如C语言)中的“include”。它告诉Ruby你想引入另一个文件的内容。在其他语言中类似的机制有: 在c#中使用<namespace>指令。 在Java中导入<package>。 Ruby include是用于mixin的面向对象继承机制。

这里有一个很好的解释:

简单的答案是require和include本质上是不相关的。 “require”类似于C中的include,这可能会让新手感到困惑。 (一个显著的区别是所需文件中的局部变量“蒸发”了 当require完成时。) Ruby包含与C包含完全不同。include语句将一个模块“混合”到一个类中。这是有限形式 多重继承。一个被包含的模块字面上赋予了一个“is-a” 对事物的关系包括它。

重点补充道。

包括 如下所示,当你将一个模块包含到你的类中时,就好像你将模块中定义的代码插入到类中,在那里你“包含”了它。它允许' mixin '行为。它用于DRY代码以避免重复,例如,如果模块中有多个类需要相同的代码。

负载 load方法几乎类似于require方法,除了它不跟踪库是否已加载。因此,可以多次加载一个库,而且在使用load方法时,必须指定“。Rb:库文件名的扩展名。

需要 require方法允许您加载一个库,并防止它被多次加载。如果你尝试在第一次之后加载相同的库,require方法将返回' false '。require方法只需要在你正在加载的库定义在一个单独的文件中,这是通常的情况。

你可以选择这个 http://ionrails.com/2009/09/19/ruby_require-vs-load-vs-include-vs-extend/

您曾经尝试过要求一个模块吗?结果如何?试试:

MyModule = Module.new
require MyModule # see what happens

模块不是必需的,只是包含的!