個人問題相似於「 在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
。