lua - 为什么在迭代表时会得到这个 "attempt to call a table value"?

标签 lua lua-table garrys-mod

我试图在 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/

相关文章:

replace - Lua 的 string.gsub 模式规则是什么?

lua - __add 在自定义 Vector3 类中不起作用

random - 从表中选择一个随机项目

string - Lua将字符串拆分为表的键和值

c++ - 从 lua 返回一个非全局表到 C

lua - 尝试索引全局 'io'(零值)

luasql 零值

string - Lua中将数组中的字符串串联成长字符串

mysql - 脚本出现错误

c++ - 如何接受常量的用户输入并使用 writeprocessmemory?