次のようなルビーコードが表示されます。設定や設定を作成するためのイディオムのようですが、よくわかりません。Application.configure
また、このコードの一部はどのように見えますか?
MyApp::Application.configure do
config.something = foo
config.....
config....
.
config....
end
次のようなルビーコードが表示されます。設定や設定を作成するためのイディオムのようですが、よくわかりません。Application.configure
また、このコードの一部はどのように見えますか?
MyApp::Application.configure do
config.something = foo
config.....
config....
.
config....
end
まず第一に、その構成方法は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.something
(config
はメソッドです)をある値に設定するだけで、同じconfig.something = foo
ことが内部で実行されconfigure
ます。
「do」から「end」までの部分はブロックと呼ばれ、のconfigure
クラスメソッドに渡されApplication
ます。(すべてのrubyメソッドは引数とブロックを受け入れることができます)
したがって、このApplication.configure
メソッドは、デフォルトのセットを使用して構成オブジェクトを作成してから、ブロックを呼び出します。次に、ブロックは表示された値を設定し、それらをオーバーライドする効果があります。
次に、その構成オブジェクトをクラス変数(グローバル変数など)として設定し、他のクラスがアプリケーションのライフサイクルの後半で構成オブジェクトを使用できるようにします。
簡略化された説明がお役に立てば幸いです。