web-dev-qa-db-ja.com

Luaでの奇妙な「テーブル値の呼び出しの試み」

次のコードスニペット:

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

そのスニペットの最初の行でエラー「テーブル値の呼び出しを試みています」が発生しています。どうして?

Itemlistは、次のような重みと文字列のテーブルのテーブルです。

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

私の知る限り、何も呼ばれていません。なぜこのエラーが発生するのですか?

13
Schilcote

ジェネリックforには、呼び出し可能な値、それに繰り返し渡されるいくつかの値、および反復が開始されるキーの3つの引数が必要です。
一部のデリバティブでは可能ですが、呼び出し可能でない場合、ストックluaはforに渡された最初の値でペアを呼び出しません。

したがって、ipairs(itemlist)pairs(itemlist)next, itemlistまたは必要なものを使用する必要があります(最後の2つは同じ動作をし、ほとんどの派生物が行うことです)。

例として、値シーケンスをアンパックするイテレーター:

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
18
Deduplicator