訂正:コードがクロージャではなかったので書き直してみた
クロージャは、プログラミング言語において引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決する関数のことである。関数とそれを評価する環境のペアであるともいえる
クロージャ - Wikipedia
う〜んよくわからん(´・ω・`)
例(javascript)
function newCounter() {
var i = 0;
return function() { // 無名関数
i = i + 1;
return i;
}
}c1 = newCounter();
クロージャ - Wikipedia
alert(c1()); // 1
alert(c1()); // 2
alert(c1()); // 3
alert(c1()); // 4
alert(c1()); // 5
Python
『Pythonでのクロージャについて(追記あり) - NAL-6295の舌先三寸』さんを参考にPythonでやってみた
def newCounter(): def f(): f.value += 1 return f.value f.value = 0 return f c1 = newCounter() print c1() #1 print c1() #2 print c1() #3 print c1() #4 print c1() #5
こんな感じ?
コード書き直してみた
コメント頂いたmorchinさんにご指摘ご指導うけたのでやり直してみた
その1
i = [0] def f(): i.append(1) return sum(i) print f() #1 print f() #2 print f() #3 print f() #4 print f() #5
その2
def neo_counter(): i = [0] def f(): i.append(1) return sum(i) return f c1 = neo_counter() print c1() #1 print c1() #2 print c1() #3 print c1() #4 print c1() #5
こんなんでどうでしょう?