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