ブロックとクロージャ

Rubyのブロックとは

ブロックっていうのは引数とは別で、命令の塊です。

以下のようなものがブロックです。

do 
end
{     }

do~~~endは複数行、{ }は一行の時に使うことが慣習としてあるようです。

ちなみにブロックだけでは、存在することができません。

"文字列、Stringは存在できます。"
do
  "ここはブロックの中です。"
  "ブロックは命令の塊です。"
end

ブロックだけでは存在できません。

が、以下のコードでオブジェクトにすることができます。

Proc.new {    }
proc {   }
lambda {  }

返り値に手続き型オブジェクトを返します。
あと、これは無名関数だそうです。(あんまわからない。)

no_name_function = proc {
  p "無名関数だよ!" 
  p "ラベリングされているだけで名前はないよ!"
}

クロージャ

手続き型オブジェクトを使うとクロージャを作れる。

def counter
  i = 10
  return proc do
    i = i + 1 
    p i 
  end 
end

count = counter() 

count.call
count.call
count.call

結果

11
12
13

クロージャは、関数の中で関数を定義すると、二回目に関数を定義した時に存在する変数を生き埋めしているとのこと。
クロージャを使うタイミングしりたい感じ。