Mark Summerfield の著書 Programming in Go Section 5.6.3 で Closure example を読んでいます。彼は、Closure を「それが参照されている場合、それが作成されたのと同じスコープに存在するすべての定数と変数を「キャプチャ」する関数」と定義しています。
彼は、クロージャーの 1 つの用途は無名関数 (または Go の関数リテラル) であると述べています。
彼はこの例を挙げています:
addPng := func(name string) string { return name + ".png" }
addJpg := func(name string) string { return name + ".jpg" }
fmt.Println(addPng("filename"), addJpg("filename"))
addPng
名前付き無名関数が文字列連結演算子のラッパーであることを理解しています+
。
私の理解が正しければ、彼は無名関数に名前を割り当て、その名前で関数を呼び出しています。この例の要点がわかりません。同じ関数を定義しaddPng
て内部で呼び出すとmain()
、同じ結果が得られます。
package main
import ("fmt")
func addPng (name string) string {
return name + ".png"
}
func main() {
fmt.Println(addPng("filename"))
}
関数を別の関数内で定義して使用できないことを理解しています。しかし、Summerfield の例の無名関数が「Closure」と呼ばれるのはなぜですか? そして、なぜラッパー関数を使用するのですか? 私は何が欠けていますか?