【发布时间】:2013-08-13 17:47:28
【问题描述】:
我正在阅读(非常好)Go book 并看到了这个例子,但我不明白它是如何工作的。
func makeEvenGenerator() func() uint {
i := uint(0)
return func() (ret uint) {
ret = i
i += 2
return
}
}
func main() {
nextEven := makeEvenGenerator()
fmt.Println(nextEven()) // 0
fmt.Println(nextEven()) // 2
fmt.Println(nextEven()) // 4
}
递增i 是常见的关闭行为。没关系。但是如果你看一下nextEven,它是一个不带参数并返回一个称为ret 的uint 的函数。但是命名返回值有什么意义呢?调用它的代码不会使用自己的变量名吗?
return 语句什么也不返回 - 那么打印的是什么? 0 / 2 / 4 这个函数是怎么出来的?
这与这样做有什么不同:
func makeEvenGenerator() func() uint {
i := uint(0)
return func() uint {
current := i
i += 2
return current
}
}
这看起来更简单,也让事情变得更明显。我是否缺少一些深入的围棋/数学概念?
【问题讨论】: