闭包
1.1 闭包概念
闭包是引用了自由变量的函数,被引用的自由变量和函数一同存在,即使己经离开了自由变量的环境也不会被释放或者删除,在闭包中可以继续使用这个自由变量。
简单的说 : 函数+引用环境=闭包
贴士:闭包( Closure)在某些编程语言中也被称为 Lambda表达式(如Java)
在闭包中可以修改引用的变量:
1 2 3 4 5 6
| str := "hello" foo := func(){ str = "world" } foo() fmt.Print(str)
|
1.2 闭包案例一 简单示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| func fn1(a int) func(i int) int { return func(i int) int { print(&a, a) return a } }
func main() {
f := fn1(1) g := fn1(2) fmt.Println(f(1)) fmt.Println(f(1))
fmt.Println(g(2)) fmt.Println(g(2))
}
|
1.3 闭包案例二 实现累加器
1 2 3 4 5 6 7 8 9 10 11 12 13
| func Accumulate(value int) func() int { return func() int { value++ return value } }
func main() {
accAdd := Accumulate(1) fmt.Println(accAdd()) fmt.Println(accAdd()) }
|
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。您可以自由复制、散布、展示及演出本作品;若您改变、转变或更改本作品,仅在遵守与本作品相同的许可条款下,您才能散布由本作品产生的派生作品!由于本人水平有限,不保证作品内容准确无误,亦不承担任何由于使用此作品所导致的损失。