我需要创建闭包吗?
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
虽然我有使用其他一些语言的经验,但我是 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