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

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


当前回答

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

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:类

其他回答

'Load'-插入文件内容。(每次调用文件时解析文件)

'Require'-插入一个文件解析的内容。(文件解析一次,存储在内存中)

'Include'-将模块包含到类中,并可以使用模块内的方法作为类的实例方法

'Extend'-将模块包含到类中,并可以使用模块内的方法作为类方法

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

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:类

例如:当你使用require 'math'时,你必须写math::PI。 但是当你使用include math时,你可以简单地写成PI。

下面是require和include之间的一些基本区别:

要求:

Require从文件系统读取文件,解析它,保存到内存中,并在给定的位置运行它,这意味着如果你在脚本运行时更改了任何内容,那么这些更改将不会反映出来。 我们按名称要求文件,而不是按模块名。 它通常用于库和扩展。

包括:

当你将一个模块包含到你的类中时,它的行为就像你将模块中定义的代码插入到你的类中一样。 我们包含模块名,而不是文件名。 它通常用于干涸代码和删除代码中的重复。

在Ruby元编程书中,

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