Procとは?
なんとなく触りでProcについてわかったので簡単かつ完結にProcをまとめて見たいと思います。
前提知識として必要なのはブロックとyield どちらも簡単に解説します。
- ブロックとは
- 記載の仕方は
do 処理内容 end
または{処理内容}
- 引数の内容を記述したもの
- 単体では存在できない(必ずクラスなどの中に存在する)
- メソッドの引数にしかなれない
- 引数として渡したブロックはyieldによって実行する
- 記載の仕方は
# メソッドを定義する # 引数の&blockは引数がブロックの場合Procオブジェクトに変換する def coll_block(&block) block.coll end # 実行 coll_block do p "Hello!!" end
- Procとは
- ブロックをオブジェクト化(メモリーにロードして実行可能状態に)したもの
- ブロック引数は一つしか渡せない(仮引数の中で一番最後に定義してはいけない)
- Prockはcallメソッドで呼べる
ブロック引数は1つしか渡せないことから引数の省略
def coll_block(&block)
からdef coll_block
ブロック引数を省略したことから引数を実行する為のメソッドを使用する
&block
からyield
となるので以下のようにかけるようになる
def coll_block yield end # cll_blockメソッドにブロック(do~end)を引数として実行する coll_block do p "Hello!!" end => "hello!!"
- prockの需要
- メソッドの拡張性を広げる
- クロージャとして作ることができる
次回はクロージャをまとめて見ます