たとえば、 こんなメソッドがあるとします。
def foo(arg)
puts "#{arg}, #{block_given?}"
end
def bar
if block_given?
yield
else
'no block'
end
end
下記のようにブロックの渡し方でfoo
メソッド側のblockとなったりbar
メソッド側になったりします。想定した渡し方になってない場合があるので注意です。
foo bar do
'block'
end
# => no block, true
foo bar {
'block'
}
# => block, false
foo(bar do
'block'
end)
# => block, false