美文网首页
golang-闭包

golang-闭包

作者: 小Angelina | 来源:发表于2016-04-06 19:12 被阅读0次
最近学习golang的匿名函数 发现闭包还是有点意思



闭包基本概念:闭包是可以包含自由(未绑定到特定对象)变量的代码块,这些变量不在这个代码块内或者任何全局上下文中定义,而是在定义代码块的环境中定义。要执行的代码块(由于自由变量包含在代码块中,所以这些自由变量以及他们引用的对象没有被释放)为自由变量提供绑定的计算环境(作用域)。

代码示例:

package main
import "fmt"
func adder() func(int) int {
     sum := 0
     return func(x int) int {
          sum += x
          return sum
     }
}
func main() {
     pos, neg := adder(), adder()
     for i := 0; i < 10; i++ {
          fmt.Println(
               pos(i),
               neg(-2*i),
          )
     }
}

运算结果:

0 0
1 -2
3 -6
6 -12
10 -20
15 -30
21 -42
28 -56
36 -72
45 -90

adder函数返回一个func(int) int 类型的函数

pos和neg分别调用了两次adder函数

adder()函数里面的sum变量属于闭包内的变量,无法被外界所访问到,保证了sum的安全性

所以我们可以将闭包理解为由函数和与其相关的引用环境组合而成的实体

相关文章

  • golang-闭包

    最近学习golang的匿名函数 发现闭包还是有点意思 闭包基本概念:闭包是可以包含自由(未绑定到特定对象)变量的代...

  • 《日子》golang-闭包

    package main import ("fmt") func main() { a := []int{1, 2...

  • swift-闭包

    闭包 闭包定义 闭包简化 - 尾随闭包 闭包参数 闭包返回值 闭包的循环引用

  • 闭包,闭包,闭包

    1、这家伙到底是什么? 网上关于这个的讨论的太多了太多了,有各种的举例子,但是大部分还在寻找这个答案的小伙伴对于变...

  • 闭包-Closures [swift 5.1]

    闭包的语法 尾随闭包 闭包逃离 自动闭包

  • Day7 闭包(Closures)

    本页包含内容:• 闭包表达式• 尾随闭包• 值捕获• 闭包是引用类型• 逃逸闭包• 自动闭包 1、闭包表达式 闭包...

  • Python闭包

    闭包 = 环境变量 + 函数 调用闭包内部的环境变量 闭包的经典误区 闭包与非闭包实现人类走路 非闭包 闭包

  • 闭包(closure)

    ● 闭包基础 ● 闭包作用 ● 闭包经典例子 ● 闭包应用 ● 闭包缺点 ● 参考资料 1、闭包基础 作用域和作...

  • swift- 闭包一

    /*• 闭包表达式• 尾随闭包• 值捕获• 闭包是引用类型• 逃逸闭包• 自动闭包*/

  • (9) python之闭包

    闭包闭包 = 函数 + 环境变量(函数定义的时候) 一个最简单的闭包 闭包不受外部变量影响 非闭包 闭包 闭包 只...

网友评论

      本文标题:golang-闭包

      本文链接:https://www.haomeiwen.com/subject/mdnplttx.html