英文:
Using local values in function definitions
问题
以下是要翻译的内容:
以下程序产生输出结果为 5, 5, 5, 5, 5。取消注释后,程序产生输出结果为 0, 1, 2, 3, 4。
是否有更好的(或者更符合惯用法的)方法,在函数声明中传递当前值,而不是使用 i := i
?
英文:
The following program
package main
import (
"fmt"
)
type TestFunc func()
func main() {
fmt.Println()
funcs := []TestFunc{}
for i:=0; i<5; i++ {
//i := i
funcs = append(funcs, func() {fmt.Println(i)})
}
for _, f := range funcs {
f()
}
}
produces an output 5, 5, 5, 5, 5. After uncommenting the line, the program
for i:=0; i<5; i++ {
i := i
funcs = append(funcs, func() {fmt.Println(i)})
}
for _, f := range funcs {
f()
}
produces an output 0, 1, 2, 3, 4.
Is there a better (or an idiomatic) way to pass the current value to a function declaration instead of using i := i
?
答案1
得分: 1
这是惯用的做法。
如果你立即调用函数,你也可以将它作为参数传递。
英文:
That is the idiomatic way of doing it.
You also could pass it as an argument, if you were calling the function immediately.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论