プログラミング的なSomething

プログラミング的なSomething

ITエンジニア(?)目線で生活・自転車・トレーニング話を綴ります

クロージャーとしてのブロックの扱い

ブロックがクロージャーとしての役割を持ちます

def create_counter
  count = 1
  return Proc.new do
    count += 1
    p count
  end
end

counter = create_counter
counter.call #=> 2
counter.call #=> 3

こんな感じになる。

create_counterメソッド自体は終了しているけど、その中のローカル変数countは見えています。 ためしに、counter2 = create_counter; couture.callをすると、2が返ってきます。 ローカル変数countは、メソッドが呼び出したProcからでないと絶対に操作することができない、外部から参照されない変数になります。

counterと別の変数にcreate_counterを代入したら、その変数は上記のコードとは別のcountを扱うことになります。