我正在学习 go 并致力于闭包。我对以下内容感到有点困惑;
func inc() func() int {
var i int = 0
return func() int {
i++
return i
}
}
func main() {
myinc := inc()
fmt.Println(myinc())
fmt.Println(myinc())
fmt.Println(myinc())
}
此代码会按预期打印 1, 2, 3。我感到困惑的是,我的理解是,调用
myinc()
本质上与调用 inc()()
相同。如果我执行以下操作:
func main() {
fmt.Println(inc()())
fmt.Println(inc()())
fmt.Println(inc()())
}
我得到的结果是 1, 1, 1。
我是否误解了 myinc := inc() 与 inc()() 中发生的情况?有人可以向我解释一下这里发生了什么吗?
var i int = 0
当您调用 inc()
时执行。
在您的第一个代码中,仅在
inc()
处调用 myinc := inc()
一次。在第二个代码中,inc()
被调用了三次。