ここに示す例のように、ブロックをメソッドに渡すときは、そのブロックがどのように使用されているかを判断する方法があります。メソッドのドキュメントやソースコードを読んで、ブロックが必要なパラメータがあればそれを理解する必要があります。
create_table
の場合、オブジェクトは準備され、create_table
メソッド自体によって渡されます。 rake
と関連付けられているタスクは、この時点では何の関係もなく、起動メカニズムとしてのみ使用されます。
それは、Rubyのブロックは0回以上呼び出すことができることを心に留めておくことが重要ですすぐまたは将来のいずれかで。これは、ブロックがすぐに呼び出されるか、後で呼び出されるか、決して呼び出されないか、呼び出される回数がわからないことを意味します。唯一期待できることは、ブロックを送信する方法によって確立されます。
ブロックがyield
でブロックされていないので、何も起こらない場所にブロックを渡すことさえできます。
類似の構文を持つ言語に由来しない限り、ブロックは最初は少し混乱する可能性があります。 JavaScriptプログラマは、function
オブジェクトを渡すことに精通しています。これは基本的にここでやっているすべてのものですが、Ruby用語では暗黙の引数として送られるProcです。それはあなたが単に機能で送信していて、それを実行するためにcreate_table
機能次第です明らかだ
次のように綴ら
create_table('model_names', function(t) {
t.string('name');
t.string('address');
t.timestamps();
});
:
よりJavaScriptの風味の例では、これは次のようになります。 Rubyはブロックがすぐに実行されるように見えるかもしれないが、ブロックの宣言にはdo ... end
とbegin ... end
の間に大きな違いがあるというような仕方で構築されている。