【问题标题】:Lua: Variable assignment via tableLua:通过表分配变量
【发布时间】:2017-12-23 00:22:51
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: lua


    【解决方案1】:

    解决我自己的问题:

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

    【讨论】:

      【解决方案2】:

      你只是在做一个浅层迭代——你不会在表格中横穿表格。例如,表输入不会将像examp.newfunc() 这样的东西作为_G.examp.newfunc() 放入_G。此外,重复引用 _G、package 和 _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、package 和 _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
      

      【讨论】:

        猜你喜欢
        • 2020-10-11
        • 2016-07-30
        • 2017-09-06
        • 1970-01-01
        • 1970-01-01
        • 2021-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多