Lua是否可以将所有局部变量加载到表中,和/或动态创建局部变量?

时间:2017-07-13 17:12:57

标签: lua local

我实际上一直想知道这个问题很长一段时间,我可以回想一下在互联网上某处读取有关将所有局部变量加载到表格中的内容,但我再也找不到了。 我想知道的是,基本上是否有任何方法可以动态创建局部变量,类似于动态创建全局变量的方式。 在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

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

2 个答案:

答案 0 :(得分:2)

  

包含局部变量的表

没有包含局部变量的表。编译的Lua中不存在局部变量。 Lua堆栈和/或upvalues上只有一些位置。在编译过程中,甚至会丢失局部变量的名称。

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

答案 1 :(得分:0)

除了语法糖之外,我没有看到你在常规本地牌桌上提出的优势。

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