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> proc['fiz'] "fiz" => "fiz" irb(main):003:0> proc.call 'buzz' "buzz" => "buzz" irb(main):004:0> proc === 'piyo' "piyo" => "piyo" irb(main):005:0> proc.('foo') "foo" => "foo" irb(main):006:0> proc.[] 'bar' "bar" => "bar" irb(main):007:0> proc.yield 'hello' "hello" => "hello"