クロージャ

昨日、一昨日のエントリで、関数を引数にとる高階関数を見てきた。今度は関数を返す関数を考えよう。
関数を返すには、return で関数を返してやればいいだけだ。それだけだと芸がないので、もう一ひねりしてみる。Go では、関数を定義した環境の変数を保持することができる。クロージャだ。
例を示そう。

genCounter の中で定義している匿名関数(これが genCounter の返り値になる)は、その外側にある変数 i を覚えている。なので、返り値の関数は呼び出されるごとに i をインクリメントしてから値を返す。

^o^ > go run closure.go
1
2
3

この通り。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です