Lua是否可以将所有局部变量加载到一个table,and/or动态创建一个局部变量?

Lua is it possible to load all local variables into a table, and/or dynamically create a local variable?

其实这个问题我想了很久,我记得在网上读过一些关于将所有局部变量加载到 table 中的东西,但我再也找不到了。 我想知道的是,是否基本上有任何方法可以动态创建局部变量,类似于动态创建全局变量的方法。 在 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)}; --the table with the local variables in it.
for i,v in pairs(LocalVars) do print(i, v); end

对于我的问题的任何一部分,我将不胜感激。 谢谢

除了语法糖之外,我看不出你提出的相对于常规本地 table 的优势。

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

the table with the local variables in it

没有 table 局部变量。已编译 Lua 中不存在局部变量。 Lua 堆栈 and/or upvalues 上有简单的位置。连局部变量的名字在编译过程中都丢失了

局部变量始终是 Lua 源代码的静态结构。它们从不存在于 table 中。如果您需要非静态构造,请使用 table。这就是 tables 的用途。这就是 Lua 全局变量在 table.

中的(部分)原因