什么是闭包
func main() {
x := 0
increment := func() int {
x++
return x
}
fmt.Println(increment())
fmt.Println(increment())
}
A function like this together with the non-local variables it references is known as a closure. In this case
increment and the variable x form the closure.
翻译:函数加上它引用的非局部变量称为闭包。在这种情况下,increment和变量x组成了闭包。
使用闭包的一种方法是编写一个返回另一个函数的函数,这个函数在被调用时可以生成一个数字序列。
package main
import "fmt"
func MakeEvenGenerator() func() uint {
i := uint(0)
return func() (ret uint) {
ret = i
i += 2
return
}
}
func main() {
nextEven := MakeEvenGenerator()
fmt.Println(nextEven())
fmt.Println(nextEven())
fmt.Println(nextEven())
fmt.Println(nextEven())
}
闭包和递归构成了函数式编程范式基础。这里因为nextEven变量存在使MakeEvenGenerator函数中的i变量始终保存在堆栈当中,使得nextEven()执行的时候,偶数值会一直增加。