使用全局变量,如果你有一个字符串“name”,你可以使用_G[name]
来访问全局变量name
:
function setGlobal(name, val)
_G[name] = val
end
如果你有
-- module.lua
local var1
local var2
没有_L
可以让您为当地人做同等的事情:
function setLocal(name, val)
_L[name] = val -- _L doesn't exist
end
是否有另一种方法可以通过表示其名称的字符串访问本地变量?
答案 0 :(得分:5)
您可以在debug
library:
debug.gelocal()
和debug.setlocal()
function setLocal(name, val)
local index = 1
while true do
local var_name, var_value = debug.getlocal(2, index)
if not var_name then break end
if var_name == name then
debug.setlocal(2, index, val)
end
index = index + 1
end
end
测试:
local var1
local var2
setLocal("var1", 42)
print(var1)
输出:42
答案 1 :(得分:0)
我强烈建议使用getLocal not ,它是debug
库中的一个函数,从不用于官方商业用途,因为它影响性能并打开黑客利用的巨大漏洞!永远不要依赖于逻辑的调试功能。
如果你真的需要这个,那么为什么不定义字典_L
,然后:
local _L = {}
_L.var1 = ...
_L.var2 = ...
上述模式并不违反Lua设计规则。