go初心者が無名関数のクロージャについて学んだのでメモ
スターティングGo言語という本を読んでいるのですが、これは面白そうだなと思った機能があったのでメモ
package main import "fmt" func later() func(string) string { // 1 つ 前 に 与え られ た 文字列 を 保存 する ため の 変数 var store string // 引数 に 文字列 を とり 文字列 を 返す 関数 を 返す return func( next string) string { s := store store = next return s } } func main() { f := later() fmt.Println(f("Golang")) // => "" fmt.Println(f("is")) // => "Golang" fmt.Println(f("awesome!")) // => "is" }
- 関数の全てがクロージャの変数になるわけではない
a := 1 b := 2 // この変数だけクロージャから参照される c := 3 return func() int{ return b }
package main import "fmt" func integers() func() int { i := 0 return func() int { i += 1 return i } } func main() { ints := integers() fmt.Println(ints()) // => "1" fmt.Println(ints()) // => "2" fmt.Println(ints()) // => "3" otherInts := integers() fmt.Println(otherInts()) // => "1" fmt.Println(ints()) // => "4" fmt.Println(ints()) // => "5" // 初期化 ints = integers() fmt.Println(ints()) // => "1" fmt.Println(ints()) // => "2" }
上手く使いこなせれると便利そうだなと思いました。
- 作者: 松尾愛賀
- 出版社/メーカー: 翔泳社
- 発売日: 2016/05/11
- メディア: Kindle版
- この商品を含むブログを見る