要求ruby目錄中的全部文件的最佳方法?

要求ruby目錄中的全部文件的最佳方法是什麼? ruby


#1樓

Dir.glob(File.join('path', '**', '*.rb'), &method(:require))

或者,若是要將文件範圍加載到特定文件夾: app

Dir.glob(File.join('path', '{folder1,folder2}', '**', '*.rb'), &method(:require))

說明: ui

Dir.glob以塊爲參數。 spa

method(:require) 將返回require方法。 code

&method(:require)會將方法轉換爲bloc。 get


#2樓

我沒有像在某些答案中那樣鏈接路徑,而是使用File.expand_pathio

Dir[File.expand_path('importers/*.rb', File.dirname(__FILE__))].each do |file|
  require file
end

更新: import

您能夠執行如下操做,而不是使用File.dirnamerequire

Dir[File.expand_path('../importers/*.rb', __FILE__)].each do |file|
  require file
end

Where .. __FILE__的文件名。 擴展


#3樓

Dir[File.dirname(__FILE__) + '/../lib/*.rb'].each do |file| 
  require File.basename(file, File.extname(file))
end

若是你沒有剝離擴展,那麼你最終可能須要兩次相同的文件(ruby不會意識到「foo」和「foo.rb」是同一個文件)。 兩次須要相同的文件會致使虛假警告(例如「警告:已經初始化常量」)。


#4樓

我參加派對已經晚了幾年,可是我有點喜歡這個單行解決方案,我曾經習慣性地將全部內容都包含在app / workers / Concer中:

Dir[ Rails.root.join *%w(app workers concerns *) ].each{ |f| require f }


#5樓

在Rails中,您能夠:

Dir[Rails.root.join('lib', 'ext', '*.rb')].each { |file| require file }

更新:修正了@Jiggneshh Gohel刪除斜線的建議。

相關文章
相關標籤/搜索