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または必要なものを使用する必要があります (最後の 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
于 2014-04-28T20:22:27.030 に答える