我需要创建闭包吗?

Do I need to create closures?

虽然我有使用其他一些语言的经验,但我是 lua 的新手,发现自己编写的代码如下:

  for k,v in pairs(config) do
    results[k] = nil
    table.insert(buttons, (function(k,v,results)
      return function()
        results[k] = v.button()
      end
    end)(k,v,results))
  end
  for k,v in pairs(config) do
    table.insert(breakers, (function(v)
      return function()
        v.breaker(_state)
      end
    end)(v))
  end
  for k,fn in pairs(tbl) do
    results[k] = nil;
    table.insert(wrappers, (function(k,fn,results)
      return function()
        results[k] = fn();
      end
    end)(k,fn,results));
  end

闭包中使用的所有变量要么是 local 包含 for 循环的函数,要么是静态全局变量。

我真的需要在 lua 中创建这样的闭包,还是我只是带着我其他语言经验的包袱?

不需要,引用参考手册原文内容:

Because of the lexical scoping rules, local variables can be freely accessed by functions defined inside their scope. A local variable used by an inner function is called an upvalue, or external local variable, inside the inner function.

for k,v in pairs(config) do
    results[k] = nil
    table.insert(buttons, function()
        results[k] = v.button()
    end)
end