在Lua中出现“尝试调用表值”的奇怪错误

下面的代码片段:

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

在该片段的第一行引发错误"attempt to call table value"。为什么?

Itemlist是一个包含重量和字符串的表格表,例如:

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

据我所知,没有调用任何内容; 为什么会出现此错误?

点赞
用户3204551
用户3204551

通用的 for 循环需要三个参数:一个可调用的值、一个重复传递给它的值,以及迭代开始的键。

标准 Lua 不会在 for 的第一个参数上调用 pairs,除非它是可调用的,但是某些变种会这样做。

因此,您必须使用 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-28 20:22:27