Rubyをやってるものです。突然ですがProcクラスってよく分からなくないですか?そこで今回はProcクラスについて簡単にまとめておきたいと思います。
RubyのProcクラスとは?ラムダ式、Procの特徴
Procクラスの特徴
Procはブロックとして記述された手続きを持ち運ぶためのクラス
Procは小さなプログラムを持ち運ぶためのクラスです。クラスにするまでもない小さな手続きをProcとして持ち運ぶというのが主な利用方法。
Proc.newメソッドにブロックを与えると、そのブロックを保持するProcオブジェクトが作られます。
Procはブロックと密接な関係がある
Procはブロックと密接に関係しています。ブロック部分がProc.callによって実行されます。メソッドを呼び出した時の引数がブロック変数となり、ブロックで最後に評価された式の値がProc#callの戻り値になります。
クロージャとしての役割がある
Procオブジェクトのように手続きと変数を環境として保持することができるものをクロージャと言います。クロージャを用いると手続きとデータをオブジェクトとして扱うことができます。
MEMO
ちなみにクラスでもメソッドと変数のデータを持ち運べますが、ちょっとした数行のプログラムの場合は処理をオブジェクト化するためにProcなどを使用します。
ラムダ式について
ラムダ式は主に2通りの作り方があります。基本的にはProcと一緒。
ラムダ式とProcオブジェクトの違い
引数のチェックが厳密になることです。Procだったら引数の個数が違っていてもエラーは出ませんが、ラムダ式だと引数の個数が変わってしまうと、エラーになります。
to_procメソッドを持ってるメソッド
元々to_procメソッドを持っているオブジェクトがあります。メソッドにブロックを指定する際に「&オブジェクト」の形式で引数を渡すとProcオブジェクトを生成するためにto_procが自動で呼ばれます。
よく使われるのはSymbol#to_procです。