按名称访问本地变量

Oli*_*ver 9 lua

对于全局_G[name]变量,name如果您有一个字符串"name",则可以使用它来访问全局变量:

function setGlobal(name, val)
   _G[name] = val
end
Run Code Online (Sandbox Code Playgroud)

如果你有

-- module.lua
local var1
local var2
Run Code Online (Sandbox Code Playgroud)

没有_L,这将允许你做当地人的等价物:

function setLocal(name, val)
   _L[name] = val -- _L doesn't exist
end
Run Code Online (Sandbox Code Playgroud)

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

Yu *_*Hao 5

您可以使用debug.gelocal(),并debug.setlocal()debug图书馆:

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
Run Code Online (Sandbox Code Playgroud)

测试:

local var1
local var2
setLocal("var1", 42)
print(var1)
Run Code Online (Sandbox Code Playgroud)

输出: 42