按名称访问本地变量。

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

有没有其他方式可以通过表示它的名称的字符串来访问局部变量呢?

点赞
用户1009479
用户1009479

你可以在debug中使用 debug.getlocal()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

2014-03-31 01:44:16
用户1282919
用户1282919

我强烈建议不要使用 getLocal,它是“debug”库中的一个函数,因为会影响性能并且会为黑客利用开放巨大的漏洞,所以它在正式商业用途中应该 决不 被使用!永远不要依赖于调试函数来执行您的逻辑。

如果您真的需要它,那么为什么不定义一个字典 _L,然后:

local _L = {}
_L.var1 = ...
_L.var2 = ...

上面的模式并不违反 Lua 的设计规则。

2014-03-31 02:14:40