首页 > 其他 > 详细

Go by Example: Closures

时间:2015-01-03 09:26:20      阅读:414      评论:0      收藏:0      [点我收藏+]

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。

英文原文


Go by Example: Closures

原文:http://blog.csdn.net/codemanship/article/details/42343365

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!