






代码:
1.https://github.com/NIGHTFIGHTING/go_learning/blob/master/src/functional/adder/adder.go
2.https://github.com/NIGHTFIGHTING/go_learning/blob/master/src/ch10/func/func_test.go
package main
import (
"fmt"
)
func adder() func(int) int {
sum := 0
return func(v int) int {
sum += v
return sum
}
}
func TestAdd() {
a := adder()
for i := 0; i < 10; i++ {
fmt.Printf("0 + ... + %d = %d\n", i, a(i))
}
}
type iAdder func(int) (int, iAdder)
func adder2(base int) iAdder {
return func(v int) (int, iAdder) {
return base + v, adder2(base +v)
}
}
func TestAdd2() {
a := adder2(0)
for i := 0; i < 10; i++ {
var s int
s, a = a(i)
fmt.Printf("0 + ... + %d = %d\n", i, s)
}
}
func main() {
TestAdd()
TestAdd2()
}
//0 + ... + 0 = 0
//0 + ... + 1 = 1
//0 + ... + 2 = 3
//0 + ... + 3 = 6
//0 + ... + 4 = 10
//0 + ... + 5 = 15
//0 + ... + 6 = 21
//0 + ... + 7 = 28
//0 + ... + 8 = 36
//0 + ... + 9 = 45
本文通过两个示例介绍了如何使用Go语言的函数闭包特性来创建累加器。第一个示例展示了简单的累加函数,每次调用都会在前一次的基础上增加新的数值并返回累计结果。第二个示例则采用递归方式,定义了一个类型iAdder,并创建了从初始基数开始的累加器,每次调用都会返回当前和及下一个累加器。
6347

被折叠的 条评论
为什么被折叠?



