2

次のようなルビーコードが表示されます。設定や設定を作成するためのイディオムのようですが、よくわかりません。Application.configureまた、このコードの一部はどのように見えますか?

MyApp::Application.configure do
  config.something = foo
  config.....
  config....
  .
  config....
end
4

2 に答える 2

4

まず第一に、その構成方法はRubyに固有のものではありません。それを使用するかどうかを選択するのは、アプリケーション(またはライブラリ、gem)です。

そのコードが何をするのかを説明するために、例としてスニペットを取り上げます。

MyApp::Application.configure do
  config.something = foo
end

ここでは、パラメーターなしでメソッドを呼び出しMyApp::Application.configureています。呼び出しの後、あなたはそれにブロックを与えています。

ブロックは、好きなように使用できるコードの一部と考えることができます。
それらは、1行または複数行で記述できます。

{ puts 'hello' }
{ |param| puts param } # with passing it a param

# or 

do |param|
  puts param
end

(覚えていmy_array.each do ... endますか?それはあなたがそれを渡すブロックです。;))

これで、そのブロックは。のconfigureおかげでメソッド内で呼び出されyieldます。

yieldメソッドに渡されたブロックの命令を使用(または実行)します。

例:yieldを内部に持つメソッドを定義しましょう:

def hello
  puts "Hello #{yield}"
end

このメソッドを呼び出すと、が得られます'hello': no block given (yield) (LocalJumpError)'

あなたはそれにブロックを渡す必要があります:hello { :Samy }
結果は次のようになりますHello Samy。ご覧のとおり、メソッドに渡されたブロックにあるものを使用しただけです。

それがまさにRails構成コードで起こっていることです。config.somethingconfigはメソッドです)をある値に設定するだけで、同じconfig.something = fooことが内部で実行されconfigureます。

あなたはここで、そしてこの素晴らしい本yieldでより多くのこととブロック について学ぶことができます。

于 2012-06-03T19:05:55.030 に答える
2

「do」から「end」までの部分はブロックと呼ばれ、のconfigureクラスメソッドに渡されApplicationます。(すべてのrubyメソッドは引数とブロックを受け入れることができます)

したがって、このApplication.configureメソッドは、デフォルトのセットを使用して構成オブジェクトを作成してから、ブロックを呼び出します。次に、ブロックは表示された値を設定し、それらをオーバーライドする効果があります。

次に、その構成オブジェクトをクラス変数(グローバル変数など)として設定し、他のクラスがアプリケーションのライフサイクルの後半で構成オブジェクトを使用できるようにします。

簡略化された説明がお役に立てば幸いです。

于 2012-06-03T18:51:48.883 に答える