遍历表时为什么会出现此“尝试调用表值”的问题?

时间:2019-05-07 01:57:43

标签: lua lua-table garrys-mod

我试图在Garry的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 --errors on this line saying "attempt to call a table value"
          if v == value then
               return k
          end
     end
     return nil
end

我很困惑这里要做的事情,因为table实际上是一个表,for k,v in table真的会失败吗?

我期望的结果是它返回具有value中的值的数字键。因此,如果value == "c"table[3]的值恰好是"c",则结果应返回3

1 个答案:

答案 0 :(得分:4)

您需要使用for k, v in ipairs(table) do而不是for k, v in table do,因为这种形式的for循环期望in之后有一个迭代器,因此尝试“调用”您的{{ 1}}变量,从而导致错误。