我的问题类似于“ 在Ruby中包含和扩展之间有什么区别? ”。
Ruby中的require
和include
什么区别? 如果我只想使用我班上某个模块中的方法,我是否require
或include
它?
#1楼
如果使用模块,则意味着将所有方法都带入类中。 如果使用模块extend
类,则意味着您将“引入”模块的方法作为类方法。 如果在模块中include
类,则意味着您将“引入”模块的方法作为实例方法。
例如:
module A
def say
puts "this is module A"
end
end
class B
include A
end
class C
extend A
end
B.say
=> B:Class的未定义方法'say'
B.new.say
=>这是模块A
C.say
=>这是模块A
C.new.say
=> C:Class的未定义方法'say'
#2楼
您是否曾经尝试过require
一个模块? 结果如何? 你试一试:
MyModule = Module.new
require MyModule # see what happens
不需要模块,仅包括模块!
#3楼
从Ruby 1.9编程开始
在继续之前,我们将对include语句提出几点要点。 首先,它与文件无关。 C程序员使用称为#include的预处理程序指令在编译过程中将一个文件的内容插入另一个文件。 Ruby的include语句只是对模块的引用。 如果该模块在单独的文件中,则在使用include之前,必须使用require(或其不太常用的表亲,load)将该文件拖入其中。 其次,Ruby include不能简单地将模块的实例方法复制到类中。 而是从类对所包含的模块进行引用。 如果多个类包含该模块,则它们都将指向同一事物。 如果更改模块内方法的定义,即使在程序运行时,包含该模块的所有类都将表现出新的行为。
#4楼
包含当您将模块包含到类中时,如下所示,就好像您采用了模块中定义的代码并将其插入到类中的“包含”位置一样。 它允许'mixin'行为。 例如,如果有多个类需要在模块中使用相同的代码,则可以使用它来使您的代码干燥,以避免重复。
加载加载方法几乎与require方法类似,不同之处在于它不跟踪是否已加载该库。 因此,可以多次加载库,而且在使用加载方法时,必须指定库文件名的“ .rb”扩展名。
Require require方法允许您加载一个库,并防止它被加载多次。 如果您在第一次之后尝试加载相同的库,则require方法将返回“ false”。 仅当要加载的库在单独的文件中定义时才需要使用require方法,通常是这种情况。
您可以选择使用此http://ionrails.com/2009/09/19/ruby_require-vs-load-vs-include-vs-extend/
#5楼
Ruby中的“ include”和“ require”有什么区别?
回答:
include和require方法的作用截然不同。
require方法可以完成大多数其他编程语言所包含的功能:运行另一个文件。 它还会跟踪您过去所需的内容,并且不需要两次相同的文件。 要运行没有此附加功能的另一个文件,可以使用load方法。
include方法将从另一个模块中获取所有方法,并将它们包括到当前模块中。 与require相比,这是语言级别的事情,而不是文件级别的事情。 include方法是使用其他模块(通常称为混合)“扩展”类的主要方法。 例如,如果您的类定义了方法“ each”,则可以包括mixin模块Enumerable,并且它可以充当集合。 由于include动词在其他语言中的用法非常不同,因此可能会造成混淆。
因此,如果您只想使用一个模块,而不是扩展它或进行混合,则需要使用require
。
奇怪的是,Ruby的require
类似于C的include
,而Ruby的include
几乎没有C的include
。
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3161288