在Lua中创建局部变量

在Lua中创建局部变量,lua,Lua,如果我在另一个变量(本例中为varname)中存储了一个变量名(“x”),我可以通过 _G[varname]=42 这是一个复杂的说法 x=42 现在我想对局部变量做同样的事情。有可能吗?没有,因为局部变量不存储在表中,也不存储在与它们的名称相关联的任何结构中。当lua代码被编译成字节码时,局部变量名会变成lua堆栈上的数字偏移量。如果确实需要使用字符串来修改局部变量,最好的选择是使用局部表 local localVars = {} function setValue(varname, v

如果我在另一个变量(本例中为varname)中存储了一个变量名(“x”),我可以通过

_G[varname]=42
这是一个复杂的说法

x=42

现在我想对局部变量做同样的事情。有可能吗?

没有,因为局部变量不存储在表中,也不存储在与它们的名称相关联的任何结构中。当lua代码被编译成字节码时,局部变量名会变成lua堆栈上的数字偏移量。

如果确实需要使用字符串来修改局部变量,最好的选择是使用局部表

local localVars = {}

function setValue(varname, value)
  localVars[varname] = value
end

function getValue(varname)
  return localVars[varname]
end
您并不是真的以这种方式创建和销毁局部变量,但是您已经非常接近了。

如果您希望每个函数都有局部变量,那么您应该为每个函数提供自己的
localVars={}
;按照现在的方式,局部变量在所有函数中共享,并且它们在函数调用之间保持不变。同样,现在,如果您调用一个使用
localVars['a']
的函数,然后该函数调用一个使用
localVars['a']
的函数,那么第二个函数将删除第一个函数的值。