在ruby中从一个目录中获取所有文件的最好方法是什么?


当前回答

如何:

Dir["/path/to/directory/*.rb"].each {|file| require file }

其他回答

如何:

Dir["/path/to/directory/*.rb"].each {|file| require file }

如果它是一个相对于执行要求的文件的目录(例如,你想加载lib目录中的所有文件):

Dir[File.dirname(__FILE__) + '/lib/*.rb'].each {|file| require file }

编辑:根据下面的评论,更新版本:

Dir[File.join(__dir__, 'lib', '*.rb')].each { |file| require file }

还有:require_relative *Dir['相对路径']呢?

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

如果您不剥离扩展名,那么您可能会需要相同的文件两次(ruby不会意识到“foo”和“foo. exe”。Rb”是相同的文件)。两次要求相同的文件可能会导致错误的警告(例如。"警告:已初始化的常量")。

而不是像在一些答案连接路径,我使用File.expand_path:

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

更新:

而不是使用文件。Dirname你可以这样做:

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

在哪里. .删除__FILE__的文件名。