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

时间:2012-08-01 17:17:03

标签: multidimensional-array lua lua-table

我试图使用表来创建一个网格,该表存储诸如x和amp;之类的信息。 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]

我是在叫错树吗? Weren的桌子设计得如此之深?

2 个答案:

答案 0 :(得分:2)

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

nav = Cell:get_nav(random)

现在,从您的问题来看,它似乎调用了这样的函数:

function Cell:get_nav(random)
   self.nav = {
    north = true,
    east = false,
    south = false,
    west = false,
}
--more code here
end 

如果是这样,发生的事情是你将Cell传递给函数内部的标识符,所以你实际上是在说

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,其中之前为self.grid [i] .nav分配nil值,因为:

function edit_my_param(f)
f = 3
end 

nav = edit_my_param(4)
print(nav)

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

问候,亨利

答案 1 :(得分:0)

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

Cell:get_nav返回什么?它返回的值会被放入self.Cell[i].nav,因此可能是多余的,并且在self.nav

中设置Cell:get_nav肯定会让人感到困惑