自分があんまり使わないせいか、Rubyのブロック関連で毎回混乱。なんで、メモ書きとして残しておく。
基本。
foo(i) { |i| ... } def foo(i) yield(i) # 指定されたブロックが実行される end
指定されたブロックを引数として明示的に受け取りたい場合。
def foo(i, &bar) ... end
ブロックの呼び出し方
def foo(i, &bar) bar.call(i) # yield(i)でもOK end
ブロックが指定されているかどうかの判定。
def foo(i, &bar) if bar # block_given?メソッドを使ってもOK bar.call(i) end end
指定されたブロックを別のメソッドに渡す。
def foo(i, &bar) baz(i, &baz) # &付きで指定 end def baz(i, &bar) bar.call(i) end