Access local variable by name

lua

Solution

You can use `debug.getlocal()` and `debug.setlocal()` in the `debug` library:

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

Test:

local var1
local var2
setLocal("var1", 42)
print(var1)

Output: `42`

Problem

With globals you can use `_G[name]` to access the global variable `name` if you have a string "name": ``` function setGlobal(name, val) _G[name] = val end ``` If you have ``` -- module.lua local var1 local var2 ``` there is no `_L` that would allow you to do the equivalent for locals: ``` function setLocal(name, val) _L[name] = val -- _L doesn't exist end ``` Is there another way that you could access a local variable by string representing its name?

Original source