两个方法返回的结果一致,为什么一定要用闭包?在什么情况下用闭包还是没懂 这个闭包的意义在哪

来源:7-1 函数式编程

凌晨1点583900196

2020-01-31


package main

import "fmt"

func main() {
	sum := 0
	a := addr()
	for i := 1; i < 20; i++ {
		sum = add(i, sum)
		fmt.Println(sum)
		fmt.Println(a(i))
	}
}

func add(i int, sum int) int {
	sum += i
	return sum
}

func addr() func(int) int {
	sum := 0
	return func(i int) int {
		sum += i
		return sum
	}
}

结果
1
1
3
3
6
6
10
10
15
15
21
21
28
28
36
36
45
45
55
55
66
66
78
78
91
91
105
105
120
120
136
136
153
153
171
171
190
190

写回答

1回答

ccmouse

2020-02-02

这里是展示了使用闭包也能够解决这个问题。

意义有两方面,一个是原理上,一个是用途。这里主要是看到原理上的意义。

我们这个通过调用addr()后,会收到一个返回的函数。这个返回的函数不只是一段代码,还包括了sum这个被打包进去的局部变量。

还有用途上的意义,我们先放一放,在后面的统一出错处理以及实战项目中,都有很自然的使用。

0
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程