如何从 Lua 表中获取除 nil 以外的数据

我试图从一个相当大的表 (bigTable) 中接收数据,而 getRow 函数应该重新排列一些数据以进行更快的计算(具体信息如下)。问题在于,其中一些值不存在(-> 是 nil)。我认为通过添加 if 语句 来首先检查值是否存在已经解决了这个问题,但是我仍然得到下面的错误。谢谢你的帮助。

我的函数(从第 46 行开始):

function getRow(a, b)
    row = {}
    for d = 0, 3 do
        if (bigTable[a + d][b + d]) then
            table.insert(row, bigTable[a + d][b + d])
        end
    end
    return row
end

错误信息:

C:\Program Files (x86)\Lua\5.1\lua.exe: .\solution_11.lua:49: attempt to index field '?' (a nil value)
stack traceback:
        .\solution_11.lua:49: in function 'getRow'
        .\solution_11.lua:69: in function 'diagonal'
        .\solution_11.lua:89: in main chunk
        [C]: ?

getRow() 函数应该从点 A、B "对角线" 向下获取二维数组的值。

点赞
用户7504558
用户7504558

目标可以通过将这一行代码

if (bigTable[a + d][b + d]) then

替换为这一行代码

if a and b and type(bigTable[a + d])=='table' and bigTable[a + d][b + d] then

来实现。这样解决了问题,因为所有可能性都被检查了(ab 不能为 nil,你尝试访问的表格是存在的,并且它包含你尝试访问的值)。你只检查了最后一个,因此当值为 nil 时就会出现错误。

2018-01-08 12:39:52