Я не понимаю результат возвращаемой функции - PullRequest
0 голосов
/ 18 июня 2020

У меня следующий исходный код:

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

1 Ответ

2 голосов
/ 18 июня 2020

Потому что a - это забавный c, который печатает x, а b - забавный c, который печатает x и добавляет к нему 10. Если вы сначала вызовете a, а затем b, он дважды напечатает 100, а затем прибавит к нему 10, но это никогда не будет напечатано. Сначала позвоните по номеру b, а затем a, и он напечатает то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...