Rubyの「Procクラス」について学んだことをまとめてみました。Procはブロックとして記述された一連の手続きを受け渡しするためのクラスです。
Procクラスとは
Procを理解するにあたりポイントとなるのがブロックです。ブロックはdo ~ endまたは{ ~ }の形で引数として渡されるものを言います。
yieldを使うと受け取り側は引数を明示することなく処理することができます。
def msg yield end msg do puts "メッセージ" end #実行結果 =>"メッセージ"
ブロックをオブジェクト化したものがProc.newです。受け取り側は明示的に引数を書くことができ、下記のように&でブロックがメソッドに渡ってきたときにProcオブジェクトになります。
&によってブロックがProcオブジェクトに変換され、callメソッドによって評価されます。
def msg(&block) block.call end msg do puts "メッセージ" end #実行結果 =>"メッセージ"
Rubyはほぼすべてがオブジェクトとして扱われますが、ブロックはオブジェクトではありません。ブロックをオブジェクト化したものがProc.newです。
&について
&で引数にブロックを渡すとProcに変換される仕組みですが、「&オブジェクト」形式で渡すとオブジェクト.to_procが自動的に呼ばれるようになってます。