为何在循环调用中,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语言的语法规则么?我在课程中并没有听到类似的规则.
14
收起
正在回答 回答被采纳积分+1
1回答
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星