为什么在遍历表时会出现“尝试调用表值”?

我在 Garry's mod Lua 中尝试查找与表的值相关联的键,但我得到了一个错误,好像它不是一个表。

这是对我正在维护/修复的其他人代码中游戏崩溃错误的较大解决方案的一部分。

长话短说,我需要根据值获取键的数字。这是一段简单的短代码,但遇到了这个问题:


function starttest()
     local tbl = {"a", "b", "c"}

     local printme = FindValueInTable(tbl, "c")

print(printme)

end

function FindValueInTable(table, value)
     for k, v in table do --在此行上出现错误,说“尝试调用表值”
          if v == value then
               return k
          end
     end
     return nil
end

我被困在这里,因为table就是一个表,如何“对k、v in table”真的失败了呢?

我期望的结果是返回具有“值”中的值的数字键。所以如果value == "c",并且table[3]恰好有值"c",那么它应该返回3作为结果。

点赞
用户1442917
用户1442917

你需要使用 for k, v in ipairs(table) do 而不是 for k, v in table do,因为这种形式的 for 循环在 in 后面期望一个迭代器,所以尝试“调用”你的 table 变量,导致出现错误。

如评论中所讨论的,如果表中有非数字或非顺序索引,则可能需要使用 pairs 而不是 ipairs

2019-05-07 05:03:10