KatsunoHomeBlogTokiAboutContactrubyのProcって何をしてるの2022.06.15Procとはブロックをコンテキスト(ローカル変数のスコープやスタックフレーム)とともにオブジェクト化した手続きオブジェクトです。リファレンスマニュアルブロックをオブジェクト化する。ちなみにブロックとはdo~endとか{}の中に書かれた処理のこと。スコープとは変数の有効範囲。ブロックをコンテキストと共にオブジェクト化したものを手続オブジェクト。procオブジェクトは手続きオブジェクト。なんで作られたと思う?(存在意義)ある処理のかたまりであるブロックをオブジェクトにしたいっていうの時に出てきたのがProcだと思う。ブロックをオブジェクトにして引数とかで扱えるようにしたかったとか。rubyはオブジェクト指向型。"ピクニックに行く"endlunch_tacoslunch_butrritosタコスとブリトーで共通の処理をまとめられる。"こぼれにくい"}ちなみにprocオブジェクトの作成方法は以下の3通り。&引数で呼び出すとブロックがprocオブジェクトに変換される。"#{amount+1}枚作る"}yieldと何が違う?procだとブロック処理を変数に格納できる。yieldはブロック処理を呼び出し時に毎回書く必要がある。endendまとめyield・・呼び出し時にブロック処理を書く必要がある。一度しか呼び出すことがない場合に使える。ブロック処理をわざわざ変数にする必要もないところ。proc・・ブロック処理を変数にまとめることができる。ブロックを繰り返し呼び出したい時に使える。おまけスコープ(変数の有効範囲)が変わったりする。ローカル変数のスコープを導入しないことを除いて名前のない関数のように使えます。ローカルの変数として使えます。リファレンスマニュアルprocを使うとスコープがなくなるのでaという値が更新され続ける。5呼び出し時に引数を設定することでダイナミックローカル変数をprocローカル変数として扱えるようになる。2普通にメソッドだとaはcメソッド内のスコープになる。