我正在閱讀 Mark Summerfield 的 Go Section 5.6.3 中的 Programming 一書中的 Closure 示例。他將 Closure 定義為“一個(gè)函數(shù),它“捕獲”存在于創(chuàng)建它的同一作用域中的任何常量和變量,如果它引用它們的話。他說閉包的一種用途是匿名函數(shù)(或 Go 中的函數(shù)字面量)他舉了這樣的例子:addPng := func(name string) string { return name + ".png" }addJpg := func(name string) string { return name + ".jpg" }fmt.Println(addPng("filename"), addJpg("filename"))我知道命名的匿名函數(shù)addPng是字符串連接運(yùn)算符的包裝器+。如果我理解正確,他正在為匿名函數(shù)分配一個(gè)名稱,然后使用該名稱調(diào)用該函數(shù)。我看不出這個(gè)例子的意義。如果我定義相同的函數(shù)addPng并在內(nèi)部調(diào)用它,main()我會(huì)得到相同的結(jié)果:package mainimport ("fmt")func addPng (name string) string { return name + ".png" }func main() { fmt.Println(addPng("filename"))}我知道我不能在另一個(gè)函數(shù)中定義和使用一個(gè)函數(shù)。但是為什么 Summerfield 示例中的匿名函數(shù)稱為“Closure”?為什么要使用包裝函數(shù)?我錯(cuò)過了什么?
2 回答

千萬里不及你
TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊
這是使用閉包進(jìn)行狀態(tài)表示的示例。
package main
import "fmt"
func NextFibonacci() func() int {
a, b := 0, 1
return func() (f int) {
f, a, b = a, b, a+b
return
}
}
func main() {
nf := NextFibonacci()
f := make([]int, 7)
for i := range f {
f[i] = nf()
}
fmt.Println(len(f), f)
}
輸出:
7 [0 1 1 2 3 5 8]
- 2 回答
- 0 關(guān)注
- 226 瀏覽
添加回答
舉報(bào)
0/150
提交
取消