理解 Go 闭包调用 myinc := inc() 与 inc()()

问题描述 投票:0回答:1

我正在学习 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()() 中发生的情况?有人可以向我解释一下这里发生了什么吗?

go closures
1个回答
0
投票

var i int = 0
当您调用
inc()
时执行。

在您的第一个代码中,仅在

inc()
处调用
myinc := inc()
一次。在第二个代码中,
inc()
被调用了三次。

© www.soinside.com 2019 - 2024. All rights reserved.