如何从lua中的嵌套表中按索引获取值?

时间:2019-03-24 07:04:07

标签: lua love2d

我一直在用LOVE2D游戏引擎制作游戏,但偶然发现了一个问题。我想访问嵌套表中的变量,但我不知道如何。

这是我的代码:

local roomNum = 1
local rooms = { r1 = { complete = false, name = "Room 1" }

if rooms[roomNum].complete == true then --problematic line
    --do stuff
end

如果我将rooms[roomNum].complete替换为rooms.r1.complete,那么它将起作用。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

'http://lua-users.org/wiki/TablesTutorial'

提供的链接使Lua中的表示例易于理解,因此将来可能会成为有用的资源。

关于替换代码为何起作用的原因,字典只是键/值对(kvp)的集合。在其他语言的示例中,这些对通常显示为KeyValuePair之类的东西。

在您的情况下,您使用的是字典用法的变体。如您所见,可以使用数字索引,例如room [1],也可以使用字符串,例如room [“ kitchen”]。当您提供一组数据来初始化字典时,它会变得很有趣。

以提供的数据为基础,您将拥有以下内容:

local rooms = { r1 = { complete = false, name = "Room 1" } 

r1等同于使用不带数据集的rooms [“ r1”]。在提供数据集时,可以引用任何“命名”键,就像它是字典的属性一样(考虑具有公共获取器/设置器的类)。对于数据集的命名键,您也可以提供数字键。

local rooms = { [1] = { complete = false, name = "Room 1" }

此索引符合您提供房间索引的方向。因此,您可以交换数据集以使用整数而不是r1,r2等,或者可以将r和索引编号连接起来。这几乎取决于您。请记住,进一步进行嵌套时,将应用相同的规则。因此,complete可能看起来像是room [1] .complete,room [“ r1”] .complete或rooms.r1.complete。