【问题标题】:Lua is it possible to load all local variables into a table, and/or dynamically create a local variable?Lua是否可以将所有局部变量加载到表中,和/或动态创建局部变量?
【发布时间】:2017-07-13 17:12:57
【问题描述】:

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

对于我的问题的任何一部分,如果能提供任何帮助,我将不胜感激。 谢谢

【问题讨论】:

  • 可以检查每个本地,从而将它们放入表中,检查 debug.getlocal 示例:lua.org/pil/23.1.1.html 但不要用它来解决问题,这是出于调试目的(性能问题)
  • 真正要解决什么问题?如果您可以动态创建局部变量,您将如何使用此功能?

标签: lua local


【解决方案1】:

包含局部变量的表

没有带有局部变量的表。编译的 Lua 中不存在局部变量。 Lua 堆栈和/或 upvalues 上有简单的位置。在编译过程中,甚至局部变量的名称都丢失了。

局部变量总是 Lua 源代码的静态结构。它们从不存在于表中。如果您需要非静态构造,请使用表格。这就是桌子的用途。这就是 Lua 全局变量在表中的(部分)原因。

【讨论】:

    【解决方案2】:

    除了语法糖之外,我看不出你提议的内容比常规本地表有什么优势。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多