2011-07-26 3 views
2

私はちょうどJavaからRubyを学び始めました。 Javaでは、より大きなプロジェクトにはパッケージを使用します。 Rubyに相当するものはありますか?または、設定のようなパッケージを実現する最善の方法は何ですか?Rubyでパッケージを使用していますか?

私が今やっていることは、新しいRubyファイルに必要なすべてのクラスをロードすることです。現在のRubyクラスに同じフォルダ内の他のRubyクラスを使用するように指示する方法はありませんか?

乾杯、 マイク

答えて

1

Rubyのパッケージのロードの3種類あります:明示的require

  • が暗黙的にgem
  • requireでライブラリをインポートautoload

  • を使用してライブラリをロードすると、ライブラリをロード

    • は、メソッドは最も直接的であり、ロードしてそのパーを実行する効果があります骨髄ファイル。そのファイルはrequireになる可能性があります。便宜上、一度に多くのファイルを読み込むことになります。

      autoloadメソッドは、指定されたシンボルを参照すると読み込まれるモジュールを宣言します。これは、必要でないものを読み込むのを避けるための一般的な方法ですが、自動的に利用できるようにします。ほとんどの大規模ライブラリは、この単一のクラスを一度にメモリにダンプすることを避けるために、このロード方法を使用します。

      gemアプローチは、ライブラリをパッケージ化するより形式化された方法です。アプリケーションを1つまたは複数の宝石に分割することは珍しいことではありませんが、可能であり、いくつかの利点があります。オープンソースとしてgemを公開する義務はありません。プライベートなWebサイトやgitリポジトリなどの独自のチャンネルを介してプライベートにして配布したり、必要に応じて.gemファイルをコピーしてインストールすることができます。あなたがrequire 'example'を呼び出したときにこれがlib/example内のすべての.rbファイルをロードし

      # lib/example.rb 
      Dir.glob(File.expand_path('example/**/*.rb', File.dirname(__FILE__))).each do |file| 
          require file 
      end 
      

      :あなたは自動的に、物事の束をロードするライブラリを作りたい場合は、あなたがこのアプローチを取るかもしれない、言われていること

  • 0

    私はあなたの気持ちを理解しています。 Javaのような別の言語から来たときに直面しなければならない普通の問題です。私はRubyモジュールを勉強しようとしますが、あなたはもっと長い返事に値するでしょう。ですから、私のアドバイスはEloquent Rubyのような良いRubyの本を読んでいます。

    +0

    モジュールはこの質問にどのように関連していますか? –

    +1

    あなたがJavaを整理することから来たとき、理解することは非常に難しいことです。私はマイクがフォルダ内のすべてのファイルを読み込む方法を尋ねていたことを知っています。私はちょうど彼にもっと複雑な問題についてのヒントを与えようとしていました。また、フォルダ内のすべてのファイルをロードしようとしている場合は、コードを整理していません。同じJavaの背景があるので、私は彼の気持ちを完全に知っています。 – lucapette

    +0

    彼はJavaパッケージと同等のことを話していました。これはモジュールであり、必要とするだけではありません。 – Andy

    1

    循環参照を処理する必要があるため、読み込みではなくrequireを使用することをお勧めします。

    あなたが指定したフォルダ内のすべてのファイルを取得したい場合は、それが十分に簡単です:

    Dir.foreach("lib"){|x| require x} 
    

    あなたの他のオプションは、手動ですべてのものを必要とし、ファイルを持っていることであり、あなたの他のファイルはそれを必要としています。

    ライブラリーのコードをmoduleブロックでラップして、独自の名前空間を付けてください。

    これは間違いなく、これはRubyがPython、つまりJavaよりも強力ではない、おそらく唯一の領域だと感じる傾向があります。

    関連する問題