在ruby中从一个目录中获取所有文件的最好方法是什么?
当前回答
试试require_all gem:
http://github.com/jarmo/require_all https://rubygems.org/gems/require_all
它让你简单地:
require_all 'path/to/directory'
其他回答
而不是像在一些答案连接路径,我使用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__的文件名。
如果它是一个相对于执行要求的文件的目录(例如,你想加载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.glob(File.join('path', '**', '*.rb'), &method(:require))
或者,如果你想要将文件加载到特定的文件夹:
Dir.glob(File.join('path', '{folder1,folder2}', '**', '*.rb'), &method(:require))
解释:
Dir。Glob以block作为参数。
方法(:require)将返回require方法。
&method(:require)将方法转换为块。
我已经晚了几年,但我有点喜欢这个单行解决方案,我用来让rails包括app/workers/concerns中的所有内容:
目录[Rails.root.join *%w(应用程序worker关注点*)]。每个{|f| require f}
推荐文章
- 我如何让红宝石打印一个完整的回溯而不是截断一个?
- 如何从Python包内读取(静态)文件?
- 如何使用RSpec的should_raise与任何类型的异常?
- 如何创建退出消息
- 忽略GEM,因为没有构建它的扩展
- 为什么我得到“Pickle - EOFError: run out of input”读取一个空文件?
- 在Gem::Specification.reset期间未解决的规格:
- Delete_all vs destroy_all
- 双引号vs单引号
- 用any可以吗?'来检查数组是否为空?
- Rails获取“each”循环的索引
- c#测试用户是否有对文件夹的写权限
- 写字符串到文本文件,并确保它总是覆盖现有的内容。
- 从另一个文件导入变量?
- Ruby类实例变量与类变量