def foo(a, b) yield a + b end def fop(a, b, &block) yield a + b end def foq(a, b, &block) block.call a + b end
引数に &block
を書かないとブロックをとるメソッドなのか取らないメソッドなのかわかりにくい。でもなんか &block
を書くとダサい。
二番目の方法だと block という引数を使ってなくてキモい。三番目の方法は一般的なコードじゃなくてキモい。
さて、ホントは上のコードの block.call は block.yield (引数のチェックをしない) になるんだろうけど、NoMethodError がでる。なんでだろ。
$ ruby -v -e 'Proc.new {|t| puts t}.yield("foo")' ruby 1.8.1 (2003-12-25) [i386-cygwin] -e:1: undefined method 'yield' for #<Proc:0x100e6dd8@-e:1> (NoMethodError) exit 1