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 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计