golang:函数闭包

From wiki 闭包
在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。

从上面的解释可以看出,其实闭包就是函数本身加上引用函数外的自由变量组成的实体,而这个自由变量的生命周期和该函数一样。
package main

import "fmt"

// 斐波列契函数
func Fibonacci() func() int {
    a, b := 0, 1
    return func() int {
       // 引用的外部自由变量 a, b
       a, b = b, a+b
       return b - a
    }
}

func main() {
    f := Fibonacci()
    for i := 0; i < 10; i++ {
        fmt.Printf("% d", f())
    }
}

output: 0 1 1 2 3 5 8 13 21 34
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,926评论 1 10
  • 以下翻译自Apple官方文档,结合自己的理解记录下来。翻译基于 swift 3.0.1 原文地址 Closure...
    艺术农阅读 1,629评论 0 3
  • 1.首先,什么是闭包 先看这么一个图: G,F,N 分别代表三个层次的函数,a,b,c分别是其中的变量。正常情况下...
    公公明阅读 1,539评论 0 3
  • 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 C 和 Objective-C 中的代...
    穷人家的孩纸阅读 1,753评论 1 5
  • 转多云了,突然有点想你,哈,好多年没有这种心境 不知最近的你过得怎么样,应该挺好的 虽然目前的状况,再没有交集,偶...
    墨色纸阅读 232评论 0 0