Go by Example: Closures

Go语言支持匿名函数。匿名函数可以组成函数闭包。当你想定义一个不需要命名的内联函数时,匿名函数是非常有用的。

package main

import "fmt"

// 这个"intSeq"函数返回另外一个在intSeq内部定义的匿名函数,
// 这个返回的匿名函数包住了变量i,从而形成了一个闭包
func intSeq() func() int {
    i := 0
    return func() int {
        i += 1
        return i
    }
}

func main() {
    // 我们调用intSeq函数,并且把结果<span style="font-family: Arial, Helvetica, sans-serif;">(函数)</span><span style="font-family: Arial, Helvetica, sans-serif;">赋值给一个函数nextInt,</span>
    // 这个nextInt函数拥有自己的i变量,这个变量每次调用都被更新。
    // 这里i的初始值是由intSeq调用的时候决定的。
    nextInt := intSeq()

    // 调用几次nextInt,看看闭包的效果
    fmt.Println(nextInt())
    fmt.Println(nextInt())
    fmt.Println(nextInt())

    // 为了确认闭包的状态是独立于intSeq函数的,再创建一个。
    newInts := intSeq()
    fmt.Println(newInts())
}

输出

<strong>$ go run closures.go
1
2
3
1</strong>

下一个章节,我们将学习函数的最后一个特性:递归。

下一个例子:Go by Example:Recursion。

英文原文

时间: 2024-10-14 20:13:22

Go by Example: Closures的相关文章

python closures and decorators

Functions as objects and closures python中的函数是first-class objects,即它们可以作为参数传递到其他函数中,可以存储到数据结构中,也可以作为函数的返回值 一个简单例子 # foo.py def callf(func): return func() >>> import foo >>> def hello(): ... return 'hello' ... >>> f = foo.callf(he

Swift学习之十四:闭包(Closures)

* 闭包(Closures) * 闭包是自包含的功能代码块,可以在代码中使用或者用来作为参数传值. * 在Swift中的闭包与C.OC中的blocks和其它编程语言(如Python)中的lambdas类似. * 闭包可以捕获和存储上下文中定义的的任何常量和变量的引用.这就是所谓的变量和变量的自封闭, * 因此命名为”闭包“("Closures)").Swift还会处理所有捕获的引用的内存管理. * * 全局函数和嵌套函数其实就是特殊的闭包. * 闭包的形式有: * (1)全局函数都是闭

A Tour of Go Function closures

Go functions may be closures. A closure is a function value that references variables from outside its body. The function may access and assign to the referenced variables; in this sense the function is "bound" to the variables. For example, the

ruby Methods, Procs, Lambdas, and Closures

define simple method定义简单方法 关键字def用于方法定义,在其后是方法名和可选的参数名列表,参数名列表会用一对圆括号括住.构成方法主体的代码放在参数列表之后,end用于结束方法定义. #define a method def factorial(n) if n<1 raise "argument must be >0" elsif n==1 1 else n*factorial(n-1) end end puts factorial(5) 方法返回值

Functions &amp; Closures

[Functions] 1.不带返回值的函数: 2.通过tuple返回元素 返回的tuple可按如下方式使用: 3.External Parameter: External parameter的使用: 4.Shorthand external parameter: 5.Default Parameter: Default Parameter自动定义了external parameter: 6.Variadic Parameters,变长参数,在类型后面加上...: 7.Variable Para

JavaScript 小记 之 闭包(Closures)

Closures are functions that refer to independent (free) variables. 闭包是以静态方式/词法方式进行存储所有父作用域的一个函数 在JavaScript高级程序设计里面通过一个 createComparisonFunction() 函数和这个函数的作用域链之间的关系图说得很明白为什么闭包可以访问外部函数的变量, 是因为闭包的作用域链不仅包括自己本地的活动对象, 还包括外部函数作用域链所指向的活动对象. 在JavaScript高级程序设

Python高级特性(2):Closures、Decorators和functools(转)

原文:Python高级特性(2):Closures.Decorators和functools 装饰器(Decorators) 装饰器是这样一种设计模式:如果一个类希望添加其他类的一些功能,而不希望通过继承或是直接修改源代码实现,那么可以使用装饰器模式.简单来说 Python中的装饰器就是指某些函数或其他可调用对象,以函数或类作为可选输入参数,然后返回函数或类的形式.通过这个在Python2.6版本中被新 加入的特性可以用来实现装饰器设计模式. 顺便提一句,在继续阅读之前,如果你对Python中的

A Swift Tour(3) - Functions and Closures

Functions and Closures 使用func来声明函数,通过括号参数列表的方式来调用函数,用 --> 来分割函数的返回类型,参数名和类型,例如: func greet(name: String, day: String) -> String { return "Hello \(name), today is \(day)." } greet("Bob", day: "Tuesday") //这是swift文档中的调用方法

Swift学习:闭包(Closures)

/* 闭包(Closures)* 闭包是自包含的功能代码块,可以在代码中使用或者用来作为参数传值.* 在Swift中的闭包与C.OC中的blocks和其它编程语言(如Python)中的lambdas类似.* 闭包可以捕获和存储上下文中定义的的任何常量和变量的引用.这就是所谓的变量和变量的自封闭,* 因此命名为”闭包“(“Closures)”).Swift还会处理所有捕获的引用的内存管理.** 全局函数和嵌套函数其实就是特殊的闭包.* 闭包的形式有:* (1)全局函数都是闭包,有名字但不能捕获任何