【问题标题】:Bizzare "attempt to call a table value" in LuaLua中奇怪的“尝试调用表值”
【发布时间】:2014-06-14 13:00:41
【问题描述】:

以下代码sn-p:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    通用的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
    

    【讨论】:

    • 所以固定语句是for k, weight, item in pairs(itemlist) do?
    • next 从传递的表中返回一个键值对,所以更像for k, v in pairs(itemlist) do。 (我现在假设每个值 v 包含重量和项目...)无论如何,standard Lua documentation (5.2) 很容易消化恕我直言...
    • 每个值 v 将是另一个包含重量和项目的表。我会阅读文档。
    猜你喜欢
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 2011-07-30
    • 2013-09-05
    • 2019-01-06
    相关资源
    最近更新 更多