11

すべてのファイルがフォルダー構造(Javaパッケージと同様)のモジュールに含まれるのはルビーの慣習ですか?

たとえば、次のようなファイル構造がある場合

lib / people / utils

ここにあるファイルは、次のようなモジュール構造になっていますか。

module People
  module Utils
    # some functionality for People::Utils
  end
end      

私が尋ねる理由は、私がいくつかのRailsコードを読んでいて、このようなファイル構造にあるファイルがいくつかあるように見えますが、モジュール宣言がないためです。

これは、を含めることなくユーティリティ関数を使用できるようにするためだと思いますPeople::Utils

モジュールをいつ使用すべきか、いつ使用すべきでないかについて、ルビーに慣例はありますか?

4

2 に答える 2

16

Railsの標準です。Railsがモデルをロードする方法は、フォルダー構造を調べてクラスがどこにあるかを推測することです。いわゆるがありautoload_pathsます。

あなたはあなたに電話することによってそれらを見つけることができますrails console(これは少しハッキーです、それらを示すためのより簡単な方法があるかもしれません):

app.instance_variable_get(:"@app").instance_variable_get(:"@_all_autoload_paths")

構成ブロックを含まないデフォルトのRailsアプリの出力は、次のようになりconfig.autoload_paths += %W(#{config.root}/lib)ます。config/application.rb

["/Users/lunks/Code/rsvp/app/assets",
 "/Users/lunks/Code/rsvp/app/controllers",
 "/Users/lunks/Code/rsvp/app/helpers",
 "/Users/lunks/Code/rsvp/app/mailers",
 "/Users/lunks/Code/rsvp/app/models"]

したがって、持っていてどこかにapp/models/something/util.rb電話をかけるとSomething::Util、これらのパスを調べて、app/models/フォルダを見つけてsomething/util.rbロードします。

一方、Rubyはそれを気にしません。プレーンRubyでの自動ロードは、このページで説明されているように機能します。Autoloadを使用するか、ファイルを直接要求する必要があります(フォルダー構造は何の意味もありません)。

于 2012-07-18T05:38:17.590 に答える
4

一般に、クラスとファイルをそのような構造に配置することをお勧めします。これにより、クラスの名前をその定義にマッピングしやすくなります。

ただし、これを行わないことは理にかなっています(最終的には、コードを好きなように構造化できます)。同じことを扱っている小さなクラスがたくさんあったとき、私は時々それをしました、私はそれらをまとめました。

また、モジュールやクラスを定義しないファイル、たとえば構成ファイル、バイナリ、またはブートストラップファイル(他のすべてのものをロードするファイル)があることは理にかなっています。

于 2012-07-18T05:29:09.560 に答える