为什么我在遍历 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
变量,这会导致错误。
我试图在 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
变量,这会导致错误。