2016-11-17 57 views
2

在我的Rails項目application.rb文件中,有一行是由一些以前開發人員在編寫項目時編寫的。路徑名#中的'{**}'的含義#

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

我知道autoload_paths所使用的鐵軌加載所有所需的文件。我無法弄清楚{**}的含義。這是否意味着將加載類目錄的所有文件和子目錄?有沒有我可以參考的文件。

我已經做了一些調試。

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

這實際上是一個Pathname對象。但我還沒有找到關於{**}here的任何參考。

有沒有人知道什麼是{**} 有沒有關於此的任何文檔?

回答

3

Pathname只是建立一個路徑,它不關心零件。

**Dir#[]的參數,它最終是Dir#glob的別名。

**的意思是「匹配目錄遞歸。」

+1

另外'{..}'用於分組和水珠交替(例如' {foo,ba {r,z},q *}'應該匹配'foo','bar','baz','quux',而不是'charlie')。 '{**}'應該與'**'相同。 – Amadan

+0

@Amadan是的,的確,** {**} **與** ** **相同​​。 – mudasobwa

2

這是Dir.glob一個特點,雖然我不知道這是爲什麼使用它來這裏的路上。 {...}是一個分組機制,但它只有一個元素,**,這是一個遞歸匹配器。

您應該罰款:

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

或者,如果你喜歡的東西更多conscise:

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