English 中文(简体)
Go: 将var改为匿名职能
原标题:Go: transfer var into anonymous function
  • 时间:2012-04-12 02:10:05
  •  标签:
  • go

我正在把变数转换成匿名功能。 是否有解决办法?

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
", 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])
}

http://www.ohchr.org。

最佳回答

我认为,这将给你带来希望:

openAction[i].Triggered().Attach(func(x int) func() {
    return func() { exec(x) }
}(i))

骗局是让你匿名后恢复匿名功能,每个职能都包含每个价值观:www.em.i:

问题回答
for i := 0; i < 12; i++ {
    i := i
    ...

从表面上看,这是你在《古法典》中看到的。 它产生于关闭工作的方式和变数的范围。 你的匿名职能是封闭的。 具体来说,它正在获取一个称为i的变量,而不是目前的价值,它涵盖了任何范围。 在您的原始法典中,这是 lo形变量,对 lo形的每一种迭代都是相同的变量。 你们的所有封锁都体现了同样的变数。 添加<代码>i:= i,宣布每一条代号上的新变量。 现在,每次封锁都会抓住这一新的变量,每场封锁都会变异。

更详细的情况是,单体变量的范围是发言。 这包括 lo块,但自 lo状变物的申报不在此列后,宣布块内有相同名称的新变数为合法,在块块中形成新的变数。 然后, lo状变量被蒙上阴影。 通常这样宣布的变数会 st,但在这种情况下,汇编者越狱分析发现,你关闭时仍指这一块状变数,而这一变量在块末时已超出范围,因此,变数被放在坡脚上。 在每一轮机上,整块重新进入,一块新的变数被排入。

你们正碰到 lo。 坡道中的一变量并不是每个迭代的新变量。 由于上述原因,您的关闭工作已经结束,其价值正在发生变化。 您的法典在规定的所有职能之后,看其关闭时的价值11。

解决办法是将一功能变成一个功能,然后又恢复另一个功能,而这种职能又紧密地关闭。 这就是为什么Adam Crosslands解决办法行之有效。





相关问题
minimum work size of a goroutine [closed]

Does anyone know approximately what the minimum work size is needed in order for a goroutine to be beneficial (assuming that there are free cores for the work to be offloaded to)?

How do you get the terminal size in Go?

How do I get the terminal size in Go. In C it would look like this: struct ttysize ts; ioctl(0, TIOCGWINSZ, &ts); But how to i access TIOCGWINSZ in Go

What do you use to write Go [closed]

I know its a bit too early, but I ve been trying out Go (Google s Programming Language) and its kindof annoying to write code in gedit. So, my question: What do you use to experiment with Go?

Shared memory vs. Go channel communication

One of Go s slogans is Do not communicate by sharing memory; instead, share memory by communicating. I am wondering whether Go allows two different Go-compiled binaries running on the same machine to ...

Embedding instead of inheritance in Go

What is your opinion of this design decision? What advantages does it have and what disadvantages? Links: Embedding description

热门标签