これ僕.com:行動分析学マニアがおくる行動戦略

意図と行動のギャップから生じる「不自由さ」への挑戦。果たして僕たちに自由はあるのか?

Rubyでブロックの勉強

自分があんまり使わないせいか、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