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 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛