首页 > 解决方案 > 我不明白返回函数的结果

问题描述

我有以下初始代码:

package main

func test(x int) (func(), func()) {
    return func() {
            println(x)
            x += 10
        }, func() {
            println(x)

        }
}

func main() {
    a, b := test(100)
    a()
    b()
}

输出是

100
110

如果我按如下方式编辑代码

package main


func test(x int) (func(), func()) {
    return func() {
            println(x)
        }, func() {
            println(x)
            x += 10
        }
}
func main() {
    a, b := test(100)
    a()
    b()
}

结果是

100
100

我希望最后一个结果如下,但事实并非如此,为什么?

110
100

标签: go

解决方案


因为a是一个打印 的函数x,并且b是一个打印x并添加 10 的函数。如果您a先调用然后再调用b,它将打印 100 两次,然后向其添加 10,但永远不会打印。先调用b然后再调用a,它会打印你想要的。


推荐阅读