ブロックを受け入れる機能の中で、ブロックとその他の時間を使用する必要があるのはなぜですか&ブロックRubyのブロックとブロックの違い
答えて
は、ローカル変数です。&block
は、メソッドに渡されたブロックへの参照です。メソッドにブロックとしてPROCを渡すためのメソッドを呼び出すときに、あなたがブロックを使用すると同じようにprocsのを使用できるように
def foo(block = nil)
p block
end
foo # => nil
foo("test") # => test
foo { puts "this block will not be called" } # => nil
def foo(&block)
p block
end
foo # => nil
foo("test") # => ArgumentError: wrong number of arguments (1 for 0)
foo { puts "This block won't get called, but you'll se it referenced as a proc." }
# => #<Proc:[email protected]:20>
また、&block
を使用することができます。
my_proc = proc {|i| i.upcase }
p ["foo", "bar", "baz"].map(&my_proc)
# => ["FOO", "BAR", "BAZ"]
p ["foo", "bar", "baz"].map(my_proc)
# => ArgumentError: wrong number of arguments (1 for 0)
変数名block
は特別な意味を持ちません。もしあなたが好きなら、&strawberries
を使うことができます。アンパサンドがここの鍵です。
this articleが参考になる場合があります。
+1 '' '&strawberries''' – raycchan
これは配列にスプラット(すなわち '*')演算子を使う方法に似ています:def foo(* args) ; other_foo(* args); end'は引数の任意の配列をとり、その同じ配列を内部関数呼び出しに渡します。ブロックでは、 'def foo(&block);を実行します。 other_foo(&ブロック);終わり –
引数リストで、&whatever
は、メソッドに渡されたブロックを取得し、Procオブジェクトにラップします。 Procは、whatever
という変数に格納されています(ここでは、アンパサンドの後に入力した名前が使用できます)。通常は「ブロック」です。メソッド呼び出し後、&whatever
構文はProcをブロックに変換します。だから、そうのようなメソッドを定義する場合:あなたは、そのブロックを持つ別のメソッドを呼び出して、ブロックを取り、メソッドを定義している
def thing(&block)
thing2 &block
end
。
ブロック前に&を設定しないと、Rubyは関数に渡す「ブロック」との関係を認識しません。ここにいくつかの例があります。関数内で後で使用するため
def f(x, block); end
f(3) { 2+2 } # gives an error, because "block" is a
# regular second argument (which is missing)
def g(x, &block); end
g(3) { 2+2 } # legal
def h(x); end
h(3) { 2+2 } # legal
:
def x(&block) # x is a 0 param function
y(block) # y is a 1 param function (taking one "Proc")
z(&block) # z is a 0 param function (like x) with the block x received
end
あなたがz(&block)
を呼び出すのであれば、それは(ほぼ!!)z { yield }
を呼び出すのと同じです:あなたは次の関数にブロックを渡します。
- 1. Rubyのブロック/ C
- 2. Rubyのブロックと収量
- 3. File.openとRuby 1.8.7のブロック
- 4. finallyブロックとafter catchブロック(C#)のコードクリーンアップの違い
- 5. Ruby CSV :: Row fetch(){ブロック}ブロックをブロックしない
- 6. Rubyブロックの問題
- 7. Ruby HTTPリクエストのブロック
- 8. Ruby delete_ifブロック
- 9. 玉の包含とブロックの違い
- 10. Ruby:ブロックと利回り
- 11. RSpecのitブロックと指定ブロックの相違
- 12. パラメータ付きRubyブロック
- 13. rubyブロックの動的ネスト
- 14. Rubyのブロック呼び出し
- 15. Rubyブロックのベスト解説?
- 16. ブロック内のRuby `&&` vs `and`
- 17. RubyのOpenSSLのDESエンコーディング「間違った最後のブロック長」
- 18. RubyとGroovyのブロック間に大きな違いはありますか?
- 19. Objective-Cのメソッドとブロックの相違
- 20. rubyブロックを理解する
- 21. WaitAllブロックのブロック
- 22. SIGINTとSIGQUITのブロックとブロック解除
- 23. ブロックをRubyの別のメソッドに渡す
- 24. ブロック実行のruby yieldメソッドのテスト
- 25. ブロック対ブロックのメソッド
- 26. BEM?ブロック内のブロック?
- 27. Rubyブロック変数スコープの問題?
- 28. Rubyブロックのソースコードを印刷する
- 29. Rubyのメソッド、PROC、およびブロック混乱
- 30. 単純なRubyの質問 - イテレータ、ブロック、シンボル
非常に良い質問@collimarco –