同じかと思ってたけど振る舞いが異なるケースがあった
def hoge(name, block) puts name block.call end hoge :fuga, -> { puts 'foo' } hoge :fuga, lambda { puts 'foo' } hoge :fuga, -> do puts 'foo' end hoge :fuga, lambda do puts 'foo' end
最後の例でこうなる
hoge.rb:9:in `lambda': tried to create Proc object without a block (ArgumentError)
do ... end
は結合強度的に hoge にブロック渡す(のでこのケースではエラーになる)はずだけど、 ->
と併用した場合は do...end
の代わりに { }
を使用したのと同じような形になるんですかね。