程序员社区

go闭包

什么是闭包

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()执行的时候,偶数值会一直增加。

赞(0) 打赏
未经允许不得转载:IDEA激活码 » go闭包

一个分享Java & Python知识的社区