私はちょうどJavaからRubyを学び始めました。 Javaでは、より大きなプロジェクトにはパッケージを使用します。 Rubyに相当するものはありますか?または、設定のようなパッケージを実現する最善の方法は何ですか?Rubyでパッケージを使用していますか?
私が今やっていることは、新しいRubyファイルに必要なすべてのクラスをロードすることです。現在のRubyクラスに同じフォルダ内の他のRubyクラスを使用するように指示する方法はありませんか?
乾杯、 マイク
私はちょうどJavaからRubyを学び始めました。 Javaでは、より大きなプロジェクトにはパッケージを使用します。 Rubyに相当するものはありますか?または、設定のようなパッケージを実現する最善の方法は何ですか?Rubyでパッケージを使用していますか?
私が今やっていることは、新しいRubyファイルに必要なすべてのクラスをロードすることです。現在のRubyクラスに同じフォルダ内の他のRubyクラスを使用するように指示する方法はありませんか?
乾杯、 マイク
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
:あなたは自動的に、物事の束をロードするライブラリを作りたい場合は、あなたがこのアプローチを取るかもしれない、言われていること
。
私はあなたの気持ちを理解しています。 Javaのような別の言語から来たときに直面しなければならない普通の問題です。私はRubyモジュールを勉強しようとしますが、あなたはもっと長い返事に値するでしょう。ですから、私のアドバイスはEloquent Rubyのような良いRubyの本を読んでいます。
循環参照を処理する必要があるため、読み込みではなくrequire
を使用することをお勧めします。
あなたが指定したフォルダ内のすべてのファイルを取得したい場合は、それが十分に簡単です:
Dir.foreach("lib"){|x| require x}
あなたの他のオプションは、手動ですべてのものを必要とし、ファイルを持っていることであり、あなたの他のファイルはそれを必要としています。
ライブラリーのコードをmodule
ブロックでラップして、独自の名前空間を付けてください。
これは間違いなく、これはRubyがPython、つまりJavaよりも強力ではない、おそらく唯一の領域だと感じる傾向があります。
モジュールはこの質問にどのように関連していますか? –
あなたがJavaを整理することから来たとき、理解することは非常に難しいことです。私はマイクがフォルダ内のすべてのファイルを読み込む方法を尋ねていたことを知っています。私はちょうど彼にもっと複雑な問題についてのヒントを与えようとしていました。また、フォルダ内のすべてのファイルをロードしようとしている場合は、コードを整理していません。同じJavaの背景があるので、私は彼の気持ちを完全に知っています。 – lucapette
彼はJavaパッケージと同等のことを話していました。これはモジュールであり、必要とするだけではありません。 – Andy