doujiu3768 2014-03-03 00:07
浏览 29
已采纳

golang:评估回调声明中的变量

I am trying to define a callback in golang:

package main

func main() {
    x, y := "old x ", "old y"
    callback         := func() { print("callback: "        , x        , y       , "
") }
    callback_bound   := func() { print("callback_bound: "  , x        , y       , "
") }
    callback_hacked  := func() { print("callback_hacked: " , "old x " , "old y" , "
") } 

    x, y = "new x ", "new y"

    callback()
    callback_bound()
    callback_hacked()
}

The output is:

callback: new x new y
callback_bound: new x new y
callback_hacked: old x old y

The basic case works, but it leaves the variables unbound, i.e. the values at call-time are used. No doubt, this is useful in some cases, but how do I declare callback_bound so that the values at declaration-time are used and the output becomes:

callback: new x new y
callback_bound: old x old y
callback_hacked: old x old y
  • 写回答

2条回答 默认 最新

  • duanchao1002 2014-03-03 02:32
    关注

    For example,

    package main
    
    func callbackXY(x, y string) func() {
        return func() { print("callbackXY: ", x, y, "
    ") }
    }
    
    func main() {
        x, y := "old x ", "old y"
        callback := callbackXY(x, y)
        x, y = "new x ", "new y"
        callback()
    }
    

    Output:

    callbackXY: old x old y
    

    Or

    package main
    
    func main() {
        x, y := "old x ", "old y"
        callback := func() {}
        {
            x, y := x, y
            callback = func() { print("callbackXY: ", x, y, "
    ") }
        }
        x, y = "new x ", "new y"
        callback()
    }
    

    Output:

    callbackXY: old x old y
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?