在下面的代码块中,我希望输出为 0、1、2、3、...、9。但是,只会产生输出 10、10、...、10。
package main
import "fmt"
func adder() []func() {
out := []func(){}
for i := 0; i < 10; i++ {
out = append(out, func() { fmt.Println(i) })
}
return out
}
func main() {
out := adder()
for i := 0; i < 10; i++ {
out[i]()
}
}
我的心理模型表明每次在 for 循环中都会生成并存储一个新函数,但事实并非如此。是否有一种解决方案可以在不修改签名(无参数或全局变量)但仍保持 i 的当前值的情况下生成新函数?
心有法竹
相关分类