我有时在 Lua 中制作小游戏,并且经常需要将 2D 数组实现为网格或棋盘。当我想检查特定单元格周围的单元格时,我通常给二维数组一个元表,这样当 grid[outOfBoundsNum] 被索引时,它会返回一个空表而不是错误:
setmetatable(grid, {
__index =
function(t, key)
if not table[key] then
return {}
else
return table[key]
end
end})
所以当grid[outOfBoundsNum][anything]
被调用时,它会返回nil
. 然后,要检查周围的单元格,我会执行以下操作:
for k, v in ipairs(neighbours) do
local cell = grid[v[1][v[2]]
if cell then -- check if this is actually within the 2D array
if cell == 1 then
-- do something
elseif cell == 2 then
-- do something else
...
end
end
这行得通,但对我来说似乎很尴尬。有更好或更好的方法吗?