【戻る】 【進む】   目次   後     44. ブロックを伴うメソッド - ブロックのオブジェクト化

ブロックのオブジェクト化

  • proc メソッドに与えたブロックはProcオブジェクト化される
  • 実際にブロックのコードを動作させるにはProc#callを使う

  • foo = proc{|x| x*x*x - 3*x + 1}
    foo.call(3) #=> 3*3*3 - 3*3 + 1
    
    proc0.rb
     
  • メソッド定義における単独のprocは、メソッドに伴うブロックをProc化する
  • メソッド引数の最後が「&var」であれば、varにメソッドを伴うブロックをProck化したものが代入される

  • def foo
      proc
    end
    foo{|x| puts x + ", world!"}.call("Hello") #=> Hello, world!
    
    def bar(&x)
      x
    end
    bar{|x| puts x + ", world!"}.call("Hello") #=> Hello, world!
    
    proc-hello0.rb
     
  • Procオブジェクトに&をつけて、メソッドの最後の実引数とすれば、Procオブジェクトがブロック扱いされる

  • world = proc{|x| x + ", world!"}
    p ["Hello", "Bye"].collect(&world)
      #=> ["Hello, world!", "Bye, world!"]
    
    proc-hello1.rb
     
    【戻る】 【進む】   目次   後     44. ブロックを伴うメソッド - ブロックのオブジェクト化