为何在循环调用中,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), ) } }
其中:
sum := 0 return func(x int) int { sum += x return sum }
匿名函数引用外部变量,形成闭包.sum是有记忆功能的.可是在函数adder()中
func adder() func(int) int { sum := 0 return func(x int) int { sum += x return sum } }
sum,是函数的内部变量,在循环中累次调用adder()函数.不应该是每调用一次,sum就被初始化一次么?这样就不能实现累加了.
按照程序运行的结果看,实现了累加,在循环调用中,sum并没有每次都被初始化.这是为什么?是go语言的语法规则么?我在课程中并没有听到类似的规则.
13
收起
正在回答 回答被采纳积分+1
1回答
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星