为什么我在遍历 table 时得到这个 "attempt to call a table value"?

Why do I get this "attempt to call a table value" when iterating through a table?

我试图在 Garry 的 mod Lua 中找到与 table 的值关联的键,但我收到一个错误,好像它不是 table.

这是针对我 maintaining/fixing.

的其他人代码中的游戏崩溃错误的更大解决方案的一部分

长话短说,我需要根据键的值获取键的编号。有这个问题的简单、简短的代码:


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 字面意思是 table,for k,v in table 怎么会真的失败了?

我期望的结果是 return 具有 value 中值的数字键。所以如果 value == "c"table[3] 恰好有值 "c" 那么它应该 return 3 结果。

您需要使用 for k, v in ipairs(table) do 而不是 for k, v in table do,因为这种形式的 for 循环需要在 in 之后有一个迭代器,因此尝试 "call" 你的 table 变量,这会导致错误。