我對區域變數“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
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/caozuo/528769.html
標籤:算法去调试
上一篇:日志服務管理和檔案共享服務
