2012-01-22 8 views
1

私は理解できないことをよりよく反映するようにこの質問を変更しました。
例えば、私がrailtiesクラスのメソッドAppBuilderにアクセスしようとした場合。ルビーでクラスと依存関係を扱う方法

require 'rails/generators/rails/app/app_generator' 
g = Rails::AppBuilder.new 
puts g.rakefile.inspect 

は、私はエラーメッセージが表示されますactivesupportの-3.1.3/libに/ active_support/secure_random.rb:5: ' `で:初期化されていない定数のSecureRandom(NameError)

私はこのことを理解していません。それぞれのクラスは他のクラスと「独立」してはいけませんか?それはオブジェクト指向プログラミングの全体のポイントではありませんか? そして今それほど重要ではない場合は、どのような依存関係を追加する必要があるのか​​、私はどのように判断できますか?これを解決するワークフローはありますか?ドキュメンテーションを見て、どのような依存関係を追加するのか何とか分かりますか?この問題はロードパスと関係がありますか?すべての依存関係を宝石やレールなどから読み込むことはできますか?私はそれを得ることはありません!

DOC:http://api.rubyonrails.org/classes/Rails/AppBuilder.html githubの:https://gist.github.com/rails/rails/blob/master/railties/lib/rails/generators/rails/app/app_generator.rb

答えて

2

依存関係のほとんどはどこか設定されている原因となり、AppBuilder内で使用されている依存関係を調べるための簡単な方法はありません。ほとんどの場合、依存関係を正しく得るために試行錯誤をする必要があります。

投稿したコードのスタイルが悪いです。ルビーコードを正しく書く方法に慣れてください。本、すなわち雄弁なルビーを購入するか、ルビーのブログを読むようにしてください。

ルビの依存関係は非常に簡単です。必要なすべてのファイルがロードされ、ファイルを介してロードが繰り返され、他のロードが必要になります。すべての必要なファイルがload pathにある場合にのみロードが機能します。このロードパスはあなたのシステムのパスに似ており、ディレクトリを追加してrubyにファイルを探す場所を伝えることができます。

一般に、ライブラリとその依存関係には専用のエントリポイントがあります。それらは通常文書化されているので、それらを使用すると、最初からすべての依存関係が取得されます。レールを使用する場合はrequire 'rails'、アクティブサポートを使用する場合はrequire 'active_support/all'になります。あなたがあなたが必要とする他のクラスを見つけ出すのではなく、ファイル/クラスを賢明に選ぶのをやめたいならば。その部分はoopとは関係がありません。依存関係の問題です(他の言語には依存関係の明示的な除外があります)。

あなたの場合、次のステップは、ファイルの先頭にrequire "securerandom"を追加し、次にエラーが発生するかどうかを確認することです。

+0

私はこれを取得しません。 OOPの全体的なポイントは、クラスの拡張が容易でなければならないということです。いいえ?問題は、この例のようにクラスがどのファイルに依存しているかを調べる方法です。トレイルとエラーは依存関係を見つけるために?どうやって? – bandola

+0

お返事ありがとうございました!効果的な方法で追加する依存関係を見つけるために、上記の例でどのようにすべきかを知ることが本当に好きです。私は本やブログの投稿から把握するのが難しいと思うこの種のもの。 – bandola

+0

私は私の質問をより明確にするために変更しました。あなたが私にしたいことを理解していません。助けてください:) – bandola

関連する問題