Ruby如何require目录及其所有子目录下的全部rb文件?
问题原因与解决方案
报错的核心原因
- 你的通配符规则
**/*会同时匹配到文件和目录(比如示例中的sub_projects文件夹本身),你之前打印路径逻辑正常,是因为输出目录路径本身不会报错,而Ruby的require方法不支持加载目录,这就是你触发报错的直接原因。 - 你没有过滤文件后缀,非
.rb格式的文件也会被纳入加载逻辑,会引发额外的加载错误。
正确实现代码
推荐使用以下写法,自动过滤目录和非Ruby文件,同时用File.join避免跨系统路径分隔符兼容问题:
# __dir__ 是Ruby内置方法,直接返回当前文件所在目录的绝对路径,无需手动拼接 Dir[File.join(__dir__, 'projects', '**', '*.rb')].each do |file| require file end
如果偏好使用require_relative,写法如下:
Dir[File.join('projects', '**', '*.rb')].each do |file| require_relative file end
**/*.rb的通配符规则只会匹配所有.rb后缀的Ruby文件,自动跳过目录和其他格式的文件,即可正常完成加载。
内容的提问来源于stack exchange,提问作者fareastwood
相关产品推荐
相关产品推荐

