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