go学习Go lang学习

Go lang 学习,函数闭包

2017-12-22  本文已影响14人  SHAN某人

Go 函数可以是闭包的。闭包是一个函数值,它来自函数体的外部的变量引用。 函数可以对这个引用值进行访问和赋值;换句话说这个函数被“绑定”在这个变量上。

例如,函数 adder 返回一个闭包。每个闭包都被绑定到其各自的 sum 变量上。

package main

import "fmt"

func adder() func(int) int {
    sum := 0
    return func(x int) int {
        sum += x
        return sum
    }
}

func main() {
    pos, neg := adder(), adder()
    for i := 0; i < 10; i++ {
        fmt.Println(
            pos(i),
            neg(-2*i),
        )
    }
}

运行结果

0 0
1 -2
3 -6
6 -12
10 -20
15 -30
21 -42
28 -56
36 -72
45 -90

利用函数闭包实现求斐波那契数列第n项值

package main

import "fmt"

func febonaci() func(int) int {
    x1  :=0  // febonaci(x-1)
    x2  :=1  // febonaci(x-2)
    sum := 0
    return func(x int) int {
        sum = x1 + x2
        x1 = x2
        x2 =sum
        return sum
    }
}

func main() {
    fnum := febonaci()
    for i := 0; i < 10; i++ {
        fmt.Println(fnum(i))
    }
}

运行结果

1
2
3
5
8
13
21
34
55
89

上一篇 下一篇

猜你喜欢

热点阅读