Lua:通过表进行变量赋值

目前我正在尝试在LUA中导出并重新导入一些变量。假设有一个名为AllGlobals的表。表中包含脚本中使用的所有全局变量,而key包含变量名,value-惊喜-包含变量值。

现在我的脚本应该重新分配变量。我开始思考下面的解决方案,显然不起作用:

1 function InsertGlobals() 
2    for key,value in pairs(AllGlobals)do 
3        键= 值
4    结束
5 end

好了:有没有人知道一种解决方案,将行3中的值分配给键包含的变量名,而不是将其插入到变量键本身中?

点赞
用户9132683
用户9132683

我的问题解决方案:

function InsertGlobals()
    for key,value in pairs(AllGlobals) do
        _G[key]=value
    end
end
2017-12-23 01:04:26
用户2262111
用户2262111

你只是进行了浅层迭代 - 你没有遍历嵌套表格。例如,表格输入不会像 examp.newfunc() 这样将内容放入 _G 中作为 _G.examp.newfunc()。此外,复制引用 _Gpackage_ENV 并不明智,除非你确实知道自己在干什么,也就是说,除非你有一个明确的目的。

function InsertGlobals(input)
    for key, value in pairs(input) do
        if(key ~= "_G" or key ~= "package" or key ~= "_ENV")then
            _G[key] = value
        end
    end
end

为了修复浅层迭代,你只需要进行一些递归。我相信你不会因此引起栈溢出,但如果你留下 _Gpackage_ENV,那么一定会。

function InsertGlobals(input)
    for key, value in pairs(input) do
        if(key ~= "_G" or key ~= "package" or key ~= "_ENV")then
            if(type(value) ~= "table")then
                _G[key] = value
            else
                InsertGlobals(value)
            end
        end
    end
end
2017-12-23 07:36:49