函数的赋值传参有点疑问
来源:7-1 函数式编程

慕粉3179828
2021-03-28
老师您好,5:13那里,14行为什么要a:=adder(),不能在16行直接使用adder(i),会报错函数参数过多的错误,虽然知道在Go语言中函数也是一种类型。但是使用变量存放函数再传参就不会报错?
写回答
1回答
-
ccmouse
2021-03-31
这是个好问题。首先adder函数是没有参数的,所以adder(i)肯定不对。
adder是一个返回函数的函数,它的返回值是func(int) int类型。它返回的函数是带参数的,因此为了编译通过,必须写成adder()(i)
不过这样程序的结果不对。因为adder()返回的函数是一个闭包,里面保存了累加的结果,而每次调用adder()都会生成一个新的函数(闭包),从0开始累加。所以我们必须记录a:=adder(),然后反复调用a。
10
相似问题