我在将变量传输到匿名函数时遇到麻烦。有解决方案吗?
import "github.com/lxn/walk"
***
var openAction [12]*walk.Action
for i := 0; i < 12; i++ {
openBmp, err := walk.NewBitmapFromFile(_films[i][0])
if err != nil {
log.Printf("Open bitmap for buildBody() :%v\n", err)
}
openAction[i] = walk.NewAction()
openAction[i].SetImage(openBmp)
openAction[i].SetText(_films[i][2])
openAction[i].Triggered().Attach( func(){
exec(i)
})
mw.ToolBar().Actions().Add(openAction[i])
}
exec(i),其中我始终= 11
最佳答案
我认为这将为您提供所需的东西:
openAction[i].Triggered().Attach(func(x int) func() {
return func() { exec(x) }
}(i))
诀窍是让您的匿名函数返回一个匿名函数,并且每个创建的函数都将包围i的每个值。
关于Go:将var转换为匿名函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10116507/