16

以下代码片段:

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

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

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

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

据我所知,什么都没有被调用;为什么会出现这个错误?

4

1 回答 1

23

泛型for需要 3 个参数:一个可调用的值,一些重复传递给它的值,以及迭代开始的键。
库存 lua 不会在传递给 for 的第一个值上调用对,如果那是不可调用的,尽管一些衍生品会这样做。

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

例如,解包值序列的迭代器:

function awesome_next(t, k)
    k, t = next(t, k)
    if not t then return end
    return k, table.unpack(t)
end

for k, a, b, c, d in awesome_next, t do
end
于 2014-04-28T20:22:27.030 回答