【问题标题】:Lua: Accessing variables in multidimensional table/arrayLua:访问多维表/数组中的变量
【发布时间】:2012-07-30 15:32:38
【问题描述】:

我正在尝试使用一个表格制作一个网格,该表格存储诸如 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]

我是不是找错树了?桌子不是设计得这么深吗?

【问题讨论】:

  • 我看不出有什么明显的东西会导致它中断,但是使用 table 漂亮打印机通常可以更容易地调试这样的问题; Serpent 是独立的,MicrolightPenlight 都包含不错的漂亮打印机,并且都在 LuaRocks 上。
  • 谢谢,会去看看。我目前一直在使用 Sublime Text,编译器告诉我调试(这不是最佳的!)。
  • 我试过了,非常感谢。现在我可以真正阅读我的表格包含的内容了!非常感谢!

标签: multidimensional-array lua lua-table


【解决方案1】:

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

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 传递到函数内部的标识符 self 中,所以您实际上是在说

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

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

但是我相信您想要的是网格 self.grid[i] 中的每个索引都包含一个表,该表本身包含一个键“导航”和一个包含方向的表。如果是这样,请更改 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,因为该函数不返回值。

问候,亨利

【讨论】:

    【解决方案2】:

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

    Cell:get_nav 返回什么?它返回的值被放入self.Cell[i].nav,因此它可能是多余的,并且在Cell:get_nav中也设置self.nav肯定会令人困惑

    【讨论】:

    • 感谢您的回复。我意识到我那里有一个错字。 grid[i] 指的是实际的网格单元。当 Cell 调用一个函数时,它应该在 grid[i][4] 处创建一个表。我将 self.nav 返回到 grid[i],但也许这就是它矫枉过正的地方?
    猜你喜欢
    • 2018-04-24
    • 2023-03-08
    • 2012-07-13
    • 2022-10-21
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多