クロージャーとしてのブロックの扱い
ブロックがクロージャーとしての役割を持ちます
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を扱うことになります。