猿问

我不明白返回函数的结果

我有以下初始代码:


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


LEATH
浏览 115回答 1
1回答

www说

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

相关分类

Go
我要回答