Pathname#join 中 '{**}' 的含义是什么

What is the meaning of '{**}' in Pathname#join

在我的 Rails 项目的 application.rb 文件中有一行,它是由一些以前从事该项目的开发人员编写的。

config.autoload_paths += Dir[Rails.root.join('app', 'classes', '{**}')]

我知道 rails 使用 autoload_paths 加载所有需要的文件。我无法弄清楚 {**} 的含义。这是否意味着将加载 类 目录的所有文件和子目录?有没有我可以参考的文档。

我做了一些调试。

2.2.5 :008 > Rails.root.join('app', 'classes', '{**}')
 => #<Pathname:/home/tk/src/project-name/app/classes/{**}> 

这其实是一个Pathname object. But I have not found any reference about {**} here.

有人知道什么是 {**} 吗? 有这方面的文档吗?

Pathname只构建路径,不关心零件

**Dir#[] 的参数,它最终是 Dir#glob.

的别名

** 表示“递归匹配目录”。

这是 Dir.glob 的一项功能,但我不确定为什么会像这里那样使用它。 {...}是一种分组机制,但是里面只有一个元素,**,这是一个递归匹配器。

你应该没问题:

Dir[Rails.root.join('app', 'classes', '**')]

或者如果你喜欢更简洁的东西:

Dir[Rails.root.join(*%w[ app classes ** ]]