从函数返回函数

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

所以,我从乔恩·博德纳(Jon Bodner)的《学习围棋》一书中找到了这个例子。

package main

import "fmt"

func makeMult(base int) func(int) int {
    return func(factor int) int {
        return base * factor
    }
}

func main() {
    twoBase := makeMult(2)
    threeBase := makeMult(3)
    for i := 0; i < 3; i++ {
        fmt.Println(twoBase(i), threeBase(i))
    }
}

输出为:

0 0
2 3
4 6

我不确定我是否正确理解这里发生的事情。我假设首先对变量的

makeMult(2)
断言返回了未命名的函数。所以现在在
twoBase
下我们有那个未命名的函数,我们知道我们的
base
是 2。当我们调用
twoBase(i)
时,我们调用该函数,现在我们提供
factor
参数?那是对的吗?谁能为我解释更多技术细节吗?

go closures
1个回答
0
投票

这样想就更容易理解了:

twoBase := func(factor int) int {
    return 2 * factor
}
threeBase := func(factor int) int {
    return 3 * factor
}

然后,在调用时,将“base”乘以“factor”并返回。

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