Lua中是否可以将所有的局部变量加载到表中,或者动态地创建一个局部变量?

我已经对这个问题思考了很长时间了,我记得在互联网的某个地方读到过将所有局部变量加载到一个表中的方法,但我再也找不到它了。 我想知道的是是否有基本的方法可以动态地创建一个局部变量,就像你可以动态地创建一个全局变量一样。 在Lua中,您可以通过以下方式创建动态全局变量:

local my_env = getfenv(1);
for i = 1, 10 do
    my_env [ "OMG_DYNAMIC_GLOBAL_VARIABLE _"..i] = i * i;
end

但我一直想知道是否有一种方法可以基本上做同样或类似的事情为局部变量。 类似于

for i = 1, 10 do
    local[ "OMG_DYNAMIC_LOCAL_VARIABLE_"..i] = i * i;
end

将为我所尝试的做一些伪代码。 作为我问题的第二部分,我想知道是否有可能迭代当前作用域中的每个局部变量?我猜我尝试做的伪代码可能看起来像:

local a = 123;
local b = 321;
LocalVars = {(local)}; --包含局部变量的表。
for i, v in pairs(LocalVars) do print(i, v); end

关于我问题的任何帮助都将不胜感激。 谢谢。

点赞
用户1944004
用户1944004

我不认为你提出的方法除了语法糖之外有任何优势,可以用一个普通的本地表来代替。

local locals = {}
locals.a = 123
locals.b = 321
for i,v in pairs(locals) do
   print(i, v)
end

你提出的语法并没有使程序变得更清晰或更易于阅读。事实上,它甚至创建了新的问题。以下代码会打印出 c 吗?还是不会因为它在嵌套的本地作用域中?

for i,v in pairs(LocalVars) do
   local c = 1729
   print(i, v)
end
2017-07-13 22:44:57
用户734069
用户734069

带有本地变量的表格

在编译后的 Lua 中,没有带有本地变量的表格。本地变量只是 Lua 栈中和/或上值的位置。甚至本地变量的名称在编译过程中也会被丢失。

本地变量始终是 Lua 源代码的静态构造。它们从不存在于表格中。如果您需要一个非静态构造,请使用表格。这就是表格的用途。这也是为什么 Lua 全局变量在一个表格中(部分)的原因。

2017-07-13 22:57:21