【问题标题】:Cannot capture variable from the closure in Golang [duplicate]无法从 Golang 的闭包中捕获变量 [重复]
【发布时间】:2022-11-19 00:47:07
【问题描述】:

我正在尝试编写将 []int 映射到 []func()int 的函数,并在内部函数的闭包中捕获 int 值,以便在将来的调用中重用。 不幸的是,我目前没有成功,也不明白我这边出了什么问题。 欣赏来自更熟练的 Golang 人的任何想法。

这是代码 sn-p:

els := []int{1, 2, 3, 4}

fSlice := func(e []int) []func() int {
   res := make([]func() int, len(e))
   for i, v := range e {
      res[i] = func() int {
         res := v
         return res
      }
   }
   return res
}(els)

fmt.Println("---")
for _, v := range fSlice {
   fmt.Println(v())
}

---
Output: 4 for each iteration of the fSlice

【问题讨论】:

标签: function go closures


【解决方案1】:

解决了:

    els := []int{1, 2, 3, 4}

    fSlice := func(e []int) []func() int {
        res := make([]func() int, len(e))
        for i, v := range e {
            res[i] = func(e int) func() int {
                return func() int {
                    return e
                }
            }(v)
        }
        return res
    }(els)

    fmt.Println("---")
    for _, v := range fSlice {
        fmt.Println(v())
    }

【讨论】:

    猜你喜欢
    • 2019-04-01
    • 2020-01-16
    • 1970-01-01
    • 2016-02-13
    • 2016-01-28
    • 2018-02-06
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    相关资源
    最近更新 更多