2011-04-23 101 views
3

我已將一組.rb文件放在目錄modules/中。每個文件都包含一個模塊。我與這個加載所有這些文件從一個獨立的腳本:在Ruby 1.9.2的目錄中包含所有模塊

Dir["modules/*.rb"].each {|file| load file } 

但我必須包括他們,一個接一個,列出並明確命名它們:

class Foo 
    include ModuleA 
    include ModuleB 
    # ... and so on. 
end 

我「M想知道是否有一些非顯性的一行能做到這一點,一拉(僞)...

class Foo 
    for each loaded file 
    include the module(s) within that file 
    end 
    # ... other stuff. 
end 

我已經考慮實際讀取文件的內容,搜索字符串」module「,然後提取模塊名稱,並在某種程度上基於這個做出include--但這看起來很荒謬。

是我想要做的建議和/或可能嗎?

回答

2

您可以在每個文件中手動定義一些變量,然後在包含文件時檢查其值。

例如,module1.rb

export = ["MyModule"] 

module MyModule 

end 

,第二個,module2.rb

export = ["AnotherModule", "ThirdModule"] 

module AnotherModule 

end 

module ThirdModule 

end 

然後就是包括所有的人都在你的文件(只是想法,它可能無法正常工作):

class Foo 
    Dir["modules/*.rb"].each do |file| 
     load file 
     if export != nil 
      export.each do { |m| include(Kernel.const_get(m)) 
     end 
    end 
end 
0

我希望這是可能的,因爲你可以把ruby代碼下面的類和包括也只是一個紅寶石調用,但你必須考慮哪些模塊需要包括在哪裏,因爲你的代碼不是唯一一個加載和包含模塊。而且你不想在你的課堂中包含對象空間中的所有模塊。

因此,我個人會將它們包括在名稱中 - 您正在爲一個類添加funcionality,並通過命名每個模塊來記錄正在添加的地方。

如果你想要這一行:在每個模塊中添加一個代碼,將其名稱添加到全局列表中(記住全部使用全局列表的缺點),然後在類定義中迭代此列表以包含所有這些列表或部分基於像名稱或什麼樣的標準。

相關問題