我在将变量传输到匿名函数时遇到麻烦。有解决方案吗?

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/

10-09 17:51