2009-01-23 99 views
11

目前我裝Ruby類爲每個類文件使用需要的命令,例如:將Ruby類加載到應用程序中的最佳方式是什麼?

require File.join(File.dirname(__FILE__), 'observation_worker') 
require File.join(File.dirname(__FILE__), 'log_worker') 

對於每個類我定義它需要的類。如果我可以在我的應用程序的入口處執行此操作,那將是非常好的。

是否有一種簡單的方法來在應用程序的開始加載所有的Ruby類?

回答

11

如果您有您的代碼去,你可以指定目錄路徑添加到負載路徑類似

$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'lib')) 

稍微清晰的目錄結構,那麼在你的代碼的其他部分,你可能需要從像一個相對路徑所以:

require 'observation_worker' 
require 'logger_worker' 

,或者如果你有LIB中的文件夾,你甚至可以做

require 'workers/observation' 
require 'workers/logger' 

在我看來,這可能是處理圖書館上下文中最簡單的方法。

2

不知道我完全理解,因爲你總是要告訴你的程序哪些文件需要,但你可以這樣做:

Dir["#{File.dirname(__FILE__)}/*.rb"].each { |f| require(f) } 

,其中將包括來自的目錄下的所有文件名爲.rb當前文件。 雖然如果你開始使用RDoc,它將不會滿意你。

明確列出您的需求通​​常不是一件壞事,它讓其他開發人員清楚地瞭解您的代碼正在發生什麼。

1

正如jtzero評論,自動加載已棄用


您還需要指定哪些加載,但你可以嘗試autoload

autoload :Module, "module" 

當恆定Module首先使用該文件"module"require自動天。

+1

僅供參考,自動加載是[已棄用](https://www.ruby-forum.com/topic/3036681) – jtzero 2013-07-17 16:26:51

2

這是我喜歡使用的選項。

http://github.com/dyoder/autocode/tree/master

從GitHub的文檔

require 'autocode' 

    module Application 
    include AutoCode 
    auto_load true, :directories => [ :configurations, :models, :views, :controllers ] 
    end 

這將嘗試從給定的目錄動態加載代碼,使用模塊名稱來確定哪個看 目錄,因此,應用:: CustomerModel可以加載文件models/customer_model.rb。

此外,你可以檢查軌道導軌的方式。

+1

供參考[autocode](http://github.com/dyoder/autocode/tree/master)是「此存儲庫是否稍後將會移除更長時間的使用。請使用wave/autocode存儲庫。「 – jtzero 2013-07-17 16:31:04

1

結賬此類加載

http://github.com/alexeypetrushin/class_loader

假設你有以下目錄結構

/your_app 
    /lib    
     /animals 
      /dog.rb 
     /zoo.rb 

只是點的ClassLoader您的應用程序的根,它會找到並加載所有其他類自動

require 'class_loader' 
autoload_dir '/your_app/lib' 

Zoo.add Animals::Dog.new # <= all classes loaded automatically 
相關問題