我试图在 Garry 的 mod Lua 中查找与表的值关联的键,但收到错误,就好像它不是表一样。
这是针对我正在维护/修复的其他人代码上的游戏崩溃错误的更大解决方案的一部分。
长话短说,我需要根据 key 的值来获取 key 的编号。一个存在此问题的简单、简短的代码:
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
结果。
最佳答案
您需要使用for k, v in ipairs(table) do
而不是for k, v in table do
,如 for
的这种形式循环需要 in
之后有一个迭代器,所以尝试“调用”您的 table
变量,这会导致错误。
正如评论中所讨论的,您可能需要使用 pairs
而不是ipairs
如果表中有非数字或非顺序索引。
关于lua - 为什么在迭代表时会得到这个 "attempt to call a table value"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56014510/