Lua:通过表格进行变量赋值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lua:通过表格进行变量赋值相关的知识,希望对你有一定的参考价值。

目前我正在尝试导出并重新导入LUA中的一些变量。想象一张桌子AllGlobals。该表包含我脚本中使用的所有全局变量,而key包含变量名称和value - surprise - 包含变量值。

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

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

那么:有没有人知道将第3行中的值赋给key中包含的变量名的解决方案,而不是将其插入变量键本身?

答案

解决我自己的问题:

function InsertGlobals()
    for key,value in pairs(AllGlobals) do
        _G[key]=value
    end
end 
另一答案

您只是进行浅层迭代 - 您不会在表格中横切表格。例如,表输入不会像_G.examp.newfunc()那样将examp.newfunc()放入_G中。另外,重复_G,包和_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

要修复浅迭代,您需要做的只是一点递归。我相信你不会用这个来砸你的筹码,但如果你离开_G,打包和_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

以上是关于Lua:通过表格进行变量赋值的主要内容,如果未能解决你的问题,请参考以下文章

第四章 语句 Lua程序设计笔记

Lua中的语句

Lua 数据类型

Lua:简单入门

如何把lua脚本注入到魔兽世界

lua教程