15-closures

//  Go支持匿名函数,可用于形成闭包
//  当需要定义一个没有名字的内部函数时,匿名函数很有用

package main

import "fmt"

func intSeq() func() int {
	//  函数intSeq返回一个定义在intSeq函数体中的匿名函数
	// 返回的函数关闭变量i以形成闭包
	i := 0
	return func() int {
		i++
		return i
	}
}

func main() {
	nextInt := intSeq()
	// 调用intSeq函数,将结果(函数)分配给nextInt
	// 此函数值捕获其自身的i值,每次调用nextInt都会更新该值

	// 多次调用nextInt来查看闭包的效果
	fmt.Println(nextInt())
	fmt.Println(nextInt())
	fmt.Println(nextInt())

	//  创建一个新的测试函数,来确定该状态对于特定函数是唯一的
	newInts := intSeq()
	fmt.Println(newInts())
}
上次修改: 10 January 2020