Function closures
A Tour of GoやってたらClosureという壁に当たったためメモ
参考
クロージャって何?というのはこのサイトを見てなんとなく理解できた気がする。
Goで実装
上のサイトの問題を解いてみる
問題: 呼び出すたびに、1,2,3,...を返すような関数 f( )を定義せよ。
f(); // 1
f(); // 2
f(); // 3
できたもの
https://github.com/depretiger/LearningClosure
LearningClosure.go
package main
import "fmt"
func adder() func() {
a := 1
return func() {
fmt.Println(a)
a++
}
}
func main() {
f := adder()
f()
f()
f()
}
adder()がクロージャを作っている関数。戻り値を無名関数funcとしている。adder()の中でaを初期化していて、adder()が返す無名関数がaをインクリメントしている。
mainでは変数f をadder()で初期化している。これでf()を呼び出すたびにaが保持されたままになるので、1ずつ増えていく。
結局何に使うか
参考のサイトではjqueryで使ってたけど他にはどんな使い方するんだろう。