我一直在想这个问题很长一段时间了,我还记得在互联网上读到一些关于把所有局部变量加载到一个表中的东西,但是我再也找不到了。我想知道的是,是否有任何方法动态地创建局部变量,类似于如何动态创建全局变量。在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对于我问题的任何一部分,我都希望得到任何帮助。谢谢
发布于 2017-07-13 22:57:21
包含局部变量的表。
没有带有局部变量的表。编译后的Lua中不存在局部变量。Lua堆栈上有简单的位置和/或上值。即使是局部变量的名称在编译过程中也会丢失。
局部变量总是Lua源代码的静态结构。它们从来不存在于一张桌子里。如果需要非静态结构,请使用表。这就是桌子的用途。这就是为什么Lua全球站在桌子上的原因之一。
发布于 2017-07-13 22:44:57
除了语法糖之外,我看不出您对常规本地表的建议有什么好处。
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)
endhttps://stackoverflow.com/questions/45087145
复制相似问题