読者です 読者をやめる 読者になる 読者になる

RubyのProcを引数付きで実行する4つの方法

ruby

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"