我正在开发一个API,需要加载当前目录和所有子目录中的所有.rb文件。目前,我正在为我添加的每个文件输入一个新的require语句,但是我想把它放在我只需要将文件放在其中一个子目录中并自动添加的地方。
是否有标准命令来执行此操作?
答案 0 :(得分:41)
在这种情况下,它加载lib目录下的所有文件:
Dir["#{File.dirname(__FILE__)}/lib/**/*.rb"].each { |f| load(f) }
答案 1 :(得分:6)
require "find"
Find.find(folder) do |file|
next if File.extname(file) != ".rb"
puts "loading #{file}"
load(file)
end
这将递归加载每个.rb
文件。
答案 2 :(得分:4)
Dir[File.expand_path "lib/**/*.rb"].each{|f| require_relative(f)}
答案 3 :(得分:2)
我一直使用gem require_all,并且根据您的要求使用以下模式完成工作:
require 'require_all'
require_all './lib/exceptions/'
答案 4 :(得分:0)
def rLoad(dir)
Dir.entries(dir).each {|f|
next if f=='.' or f=='..'
if File.directory?(f)
rInclude(f)
else
load(f) if File.fnmatch('*.rb', f)
end
}
end
这应该递归load
dir
指定的目录中的所有.rb文件。例如,rLoad Dir.pwd
可以在当前工作目录上运行。
但要小心这样做。这会进行深度优先搜索,如果您的Ruby脚本中存在任何冲突的定义,它们可能会以一种非显而易见的方式解析(我相信按文件夹/文件名的字母顺序排列)。
答案 5 :(得分:0)
你应该看看这个gem。它非常小,所以你可以重新使用代码而不是安装整个gem。