2016-11-17 2 views
2

私のRailsプロジェクトにはapplication.rbというファイルがあります。これは、プロジェクトを担当していた以前の開発者によって書かれた行です。Pathname#joinの '{**}'の意味は何ですか

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の機能です。 {...}はグループ化のメカニズムですが、そこには要素が1つしかありません。**は再帰的なマッチャーです。

あなたは罰金する必要があります:

もっと何かconsciseよう
Dir[Rails.root.join('app', 'classes', '**')] 

それとも場合:

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