奇怪的“试图在Lua中调用一个表值”

时间:2014-04-28 20:09:41

标签: for-loop lua runtime-error next garrys-mod

以下代码段:

for weight, item in itemlist do
    weight_total=weight_total+weight
end

导致错误"尝试调用表值"在该片段的第一行。为什么呢?

Itemlist是权重和字符串表格的表格,如下所示:

local itemlist = {
                        {4,"weapon_pistol"},
                        {2,"weapon_357"},
                        ...

据我所知,没有任何东西被称呼;为什么会出现这个错误?

1 个答案:

答案 0 :(得分:17)

泛型for需要3个参数:一个可调用的值,一些重复传递给它的值,以及迭代开始的键。
股票lua不会在传递给第一个值的情况下调用对,如果这不是可调用的,尽管有一些衍生产品可以调用。

因此,您必须使用ipairs(itemlist)pairs(itemlist)next, itemlist或任何您想要的内容(最后两个具有相同的行为,并且是大多数衍生品的行为)。

迭代器解包值序列...

function awesome_next(t, k)
    local k, v = next(t, k)
    if not v then return end
    return k, table.unpack(v)
end
for k, a, b, c, d in awesome_next, t do
end