所以,我从乔恩·博德纳(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
参数?那是对的吗?谁能为我解释更多技术细节吗?
这样想就更容易理解了:
twoBase := func(factor int) int {
return 2 * factor
}
threeBase := func(factor int) int {
return 3 * factor
}
然后,在调用时,将“base”乘以“factor”并返回。