Procにこんな実行の方法があったなんて知らなかったのでメモ。 引用 self[*arg] -> () call(*arg) -> () self === *arg -> () yield(*arg) -> () 手続きオブジェクトを実行してその結果を返します。 引数の渡され方はオブジェクトの生成方法によって異なります。 詳しくは Proc#lambda? を参照してください。 「===」は when の所に手続きを渡せるようにするためのものです。 http://docs.ruby-lang.org/ja/2.1.0/method/Proc/i/=3d=3d=3d.html 実行結果 irb(main):001:0> proc = -> (x) { p x } => #<Proc:0x007fa8bcd12e70@(irb):1 (lambda)> irb(main):002:0> pro