博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go语言学习之闭包函数
阅读量:6275 次
发布时间:2019-06-22

本文共 1944 字,大约阅读时间需要 6 分钟。

package mainimport (    "fmt")// 匿名函数1func intSeq() func() int{     var arrInt = [10]int{
1,2,3,4,5,6,7,8,9,10} i := -1 return func() int{ i += 1 return arrInt[i] }}// 带参数匿名函数2func intSeq2() func(index int) int{ var arrInt = [10]int{
0,1,2,3,4,5,6,7,8,9} i := -1 return func(index int) int{ i += 1 return arrInt[index] }} func testIntSeq(){ nextInt := intSeq() fmt.Println(nextInt()) fmt.Println(nextInt()) } func testIntSeq2(){ nextInt := intSeq2() fmt.Println(nextInt(2)) fmt.Println(nextInt(5)) } func testQuestion(){ var j int = 5 a := func() (func()){ var i int = 10 return func() { fmt.Println(i, j) } } b := a() b()} func testQuestion2(){ var j int = 5 a := func() (func()){ var i int = 10 return func() { fmt.Println(i, j) } }() a() } func Question3() []func() { b := make([]func(), 3, 3) for i := 0; i < 3; i++ { b[i] = func() { fmt.Println(i) } } return b } // 闭包通过引用的方式使用外部函数的变量。  // 上例中只调用了一次函数B,构成一个闭包,i 在外部函数B中定义,所以闭包维护该变量 i ,c[0]、c[1]、c[2]中的 i 都是闭包中 i 的引用。   // 因此执行c:=Question3()后,i 的值已经变为3,故再调用c[0]()时的输出是3而不是0。 func testQuestion3(){ c := Question3() c[0]() c[1]() c[2]() } func Question4() []func() { b := make([]func(), 3, 3) for i := 0; i < 3; i++ { b[i] = (func(j int) func() { return func() { fmt.Println(j) } })(i) } return b} // 通过嵌套匿名函数的方式解决了testQuestion3的问题 func testQuestion4(){ c := Question4() c[0]() c[1]() c[2]() } func main(){ // 测试1匿名函数1 testIntSeq(); // 测试2带参数匿名函数 testIntSeq2(); // 测试3 testQuestion(); // 测试4 testQuestion2(); // 测试5 testQuestion3(); // 测试6 testQuestion4(); }

 

转载于:https://www.cnblogs.com/xzlq/p/9951612.html

你可能感兴趣的文章
Android开发 - 掌握ConstraintLayout(九)分组(Group)
查看>>
springboot+logback日志异步数据库
查看>>
Typescript教程之函数
查看>>
Android 高效安全加载图片
查看>>
vue中数组变动不被监测问题
查看>>
3.31
查看>>
类对象定义 二
查看>>
收费视频网站Netflix:用户到底想要“点”什么?
查看>>
MacOS High Sierra 12 13系统转dmg格式
查看>>
关于再次查看已做的多选题状态逻辑问题
查看>>
动态下拉菜单,非hover
查看>>
政府安全资讯精选 2017年第十六期 工信部发布关于规范互联网信息服务使用域名的通知;俄罗斯拟建立备用DNS;Google打击安卓应用在未经同意情况下收集个人信...
查看>>
简单易懂的谈谈 javascript 中的继承
查看>>
多线程基础知识
查看>>
iOS汇编基础(四)指针和macho文件
查看>>
Laravel 技巧锦集
查看>>
Android 使用 ViewPager+RecyclerView+SmartRefreshLayout 实现顶部图片下拉视差效果
查看>>
Flutter之基础Widget
查看>>
写给0-3岁产品经理的12封信(第08篇)——产品运营能力
查看>>
ArcGIS Engine 符号自动化配置工具实现
查看>>