我對區域變數“i”有疑問。我第二次呼叫 nextEven 時,我認為“i”應該初始化回 0。但是值“i”保存在“makeEvengenerator()”中。
package main
import "fmt"
func makeEvengenerator() func() int {
i:=0
return func() (ret int) {
ret = i
i = 2
return ret
}
}
func main() {
nextEven := makeEvengenerator()
fmt.Println(nextEven())
fmt.Println(nextEven())
fmt.Println(nextEven())
}
我希望列印出 0 0 0 我也不明白為什么每次呼叫 nextEven() 時,代碼“i:=0”都不會在每次呼叫 nextEven() 時再次運行
uj5u.com熱心網友回復:
我第二次呼叫 nextEven,我認為“i”應該初始化回 0
為什么會這樣?如果你真的想重新初始化 0,那么你可以這樣做:
func makeEvengenerator() func() int {
return func() (ret int) {
i := 0
ret = i
i = 2
return ret
}
}
但這沒有多大意義,因為您通常需要閉包來封裝狀態或依賴項。
您可以在此處獲得一些檔案和替代示例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/533369.html
標籤:算法去调试
上一篇:Laravel8dd()限制
