按名称访问本地变量

时间:2014-03-31 01:20:23

标签: lua

使用全局变量,如果你有一个字符串“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

是否有另一种方法可以通过表示其名称的字符串访问本地变量?

2 个答案:

答案 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设计规则。

相关问题