Rubyでクロージャ
JavaScriptでよく見るクロージャを、Rubyでもやってみる。
JavaScript 関数スコープ
・内側から外側の変数は利用できる。
・外側から内側の変数は利用できない。
JavaScriptの場合、関数スコープを利用して、クロージャを実装する。
Rubyの場合、ブロックスコープを利用して、クロージャを実装する。
Procオブジェクトを返す関数を定義する場合。
def createCounter num = 0 Proc.new do num += 1 p num end end counter = createCounter counter.call # 1 counter.call # 2 counter.call # 3 counter.call # 4 counter.call # 5
ProcオブジェクトからProcオブジェクトを返す場合。
createCounter = Proc.new do num = 0 Proc.new do num += 1 p num end end counter = createCounter.call counter.call # 1 counter.call # 2 counter.call # 3 counter.call # 4 counter.call # 5
クロージャをあまり実務で使ったことない。もっと積極的に使おう。