Lua:访问多维表/数组中的变量

我正在尝试使用表创建网格,其中存储了诸如x和y坐标、纹理信息和另一个表的信息。下面是用于创建网格的一些代码:

for i = i, n do
    local random = math.floor(rainbow.random(1, 13))
    self.grid[i] = {
        sprite = Labyrinth:make_cell_texture(spritebatch, position_x, position_y, i, random),
        y = position_y,
        x = position_x,
        nav = Cell:get_nav(random)
    }
    position_x = position_x + 0.09375
end

nav = Cell:get_nav(random)

部分中,我创建了一个新表:

if random == 1 then
    self.nav = {
        north = true,
        east = false,
        south = false,
        west = false,
    }

问题是访问这些变量,以检查它们是真还是假。我将self.nav返回到grid[i].nav,我可以print(self.nav.east)并得到一个true

但是在后面的代码中访问表时,它总是返回nil,即使我可以打印出那里有一个表。

我已经尝试了这个循环:

for i = 1, 10 do
    if self.grid[i].nav.north and self.grid[i + 10].nav.south then
        print("Two sides are touching!")
    end
end

并尝试使用self.grid[i][4].north,但都没有成功。

我设置的方式是错误的吗?也尝试了将nav重命名为[4]

我在错误的方向上吗?难道表不是设计成如此深吗?

点赞
用户33252
用户33252

在某些情况下,您将其称为 Cell[i],在其他情况下称为 grid[i] -- 您确定引用的是同一张表格吗?

Cell:get_nav 返回什么?返回值被放入 self.Cell[i].nav 中,这可能是多余的,并且在 Cell:get_nav 中也设置了 self.nav,肯定会引起困惑。

2012-08-01 19:40:44
用户1544032
用户1544032

在填充网格的循环中,您使用了以下代码:

nav = Cell:get_nav(random) 

现在,从您的问题中可以看出,它调用了一个函数,就像这样:

function Cell:get_nav(random) 
   self.nav = {
    north = true,
    east = false,
    south = false,
    west = false,
}
--更多的代码在这里
end

如果是这样的话,那么您正在将Cell传递到函数内的标识符self中,因此您实际上是在说

Cell.nav = {
    north = true,
    east = false,
    south = false,
    west = false,
}

这是因为Dog:jump(height)与Dog.jump(self,height)相同,其中Dog被传递到self中。

但是,我认为您打算让格子self.grid[i]中的每个索引都包含一个表,该表本身包含一个键“nav”和一个包含方向的表。如果是这样,请将Cell:get_nav函数更改为返回值,如下所示:

if random == 1 then
return {
    north = true,
    east = false,
    south = false,
    west = false,
}

这将将方向表分配到self.grid[i].nav中,而以前它将nil值分配给self.grid[i].nav,因为:

function edit_my_param(f)
f = 3
end

nav = edit_my_param(4)
print(nav)

将值nav设置为nil,因为该函数不返回值。

谢谢,亨利

2012-08-04 12:29:19