【问题标题】:How to access a table using a string in Lua如何在 Lua 中使用字符串访问表
【发布时间】:2013-12-07 13:35:03
【问题描述】:

我正在尝试删除 mainMenuButtonGroup1mainMenuButtonGroup6

为此,我认为我需要执行以下操作:[mainMenuButtonGroup..n] 我该怎么做?

local mainMenuButtonGroup1 = { 1,2 }
local mainMenuButtonGroup2 = { 3,4 }
local mainMenuButtonGroup3 = { 5,6 }
local mainMenuButtonGroup4 = { 7,8 }
local mainMenuButtonGroup5 = { 9,10 }
local mainMenuButtonGroup6 = { 11,12 }

for n = 1, 6 do
      [mainMenuButtonGroup..n] = nil
end

【问题讨论】:

  • 这些变量不是全局变量。
  • 这是 Corona SDK 中的显示对象表。在任何情况下,我认为 _G 都会起作用,如果它们是全局的但它们不是:(
  • 那么您需要帮助迭代表吗?还是局部变量?
  • 我需要帮助了解如何连接 2 个字符串,然后使用该字符串来引用本地表变量。然后我将对所说的表变量做“事情”。基本上,我不想重复我的代码 6 次。
  • 为什么要对[a] 变量'做“事情”?它是在闭包中捕获的吗?你的代码没有显示出来;请注意,变量在 Lua 中没有类型。如果你想对 table 值 做一些事情,那就是另外一个问题了。您的代码也没有显示。

标签: string lua coronasdk lua-table


【解决方案1】:

根据您的 cmets,我认为这类似于您想要做的事情,其中​​ t 是您提到的表格。

for i = 1, 6 do
    local k = 'mainMenuButtonGroup' .. i
    t[k]:removeSelf()
    t[k] = nil
end

字符串连接由.. 双句点运算符执行,表索引通过.[] 执行。在这种情况下,您通过 [] 进行索引,因为您使用的是变量而不是常量名称。


编辑: 将类似的局部变量放入表中。它使作为一个组进行迭代变得非常容易。事实上,我所知道的迭代本地变量的唯一方法是通过调试库。

local mainMenuButtonGroup = { {1,2}, {3,4}, {5,6}, {7,8}, {9,10} }
table.insert(mainMenuButtonGroup, {11,12})

for i = 1, 6 do
    mainMenuButtonGroup[i] = nil
end

但是请注意,将表中的数字索引设置为nil 不会重新排列表的数字索引值。 ,你会留下一个有洞的桌子。见table.remove

【讨论】:

  • 在您的示例中,k 是我要编辑的表。为了清楚起见,我更改了问题的代码。
  • @Gullie667 我已经编辑了我的答案作为回应。请让我知道你的想法。
  • 感谢您的回答。我想按照我最初想要的方式在LUA中是不可能的。我会加你,但缺乏代表。不过还是谢谢。
【解决方案2】:

假设变量是全局变量,它们将在_G 表中:

for n = 1, 6 do
   for i = _G['mainMenuButtonGroup'..n].numChildren, 1, -1 do
      _G['mainMenuButtonGroup'..n][i]:removeSelf()
      _G['mainMenuButtonGroup'..n][i] = nil
   end
end

如果它们是本地的,您可以使用debug.getlocal,但您必须遍历所有本地,直到找到您想要的名称。不理想,但可能。

【讨论】:

  • 这些变量不是全局变量。 :(
猜你喜欢
  • 2017-05-15
  • 1970-01-01
  • 2016-07-25
  • 2022-11-19
  • 2021-01-18
  • 2020-02-20
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多