路径名中的“{**}”是什么意思#joed

时间:2016-11-17 07:26:25

标签: ruby-on-rails ruby pathname

在我application.rb文件的Rails项目中,有一行,由一些正在开展该项目的开发人员编写。

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对象。但我没有找到关于{**} here的任何参考资料。

是否有人知道{**}是什么? 是否有相关文档?

2 个答案:

答案 0 :(得分:3)

Pathname只是构建一个路径,它不关心部分。

**Dir#[]的参数,最终是Dir#glob的别名。

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

答案 1 :(得分:2)

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

你应该没事:

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

或者如果你喜欢更精诚的话:

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