次のコードスニペット:
for weight, item in itemlist do
weight_total=weight_total+weight
end
そのスニペットの最初の行でエラー「テーブル値の呼び出しを試みています」が発生しています。どうして?
Itemlistは、次のような重みと文字列のテーブルのテーブルです。
local itemlist = {
{4,"weapon_pistol"},
{2,"weapon_357"},
...
私の知る限り、何も呼ばれていません。なぜこのエラーが発生するのですか?
ジェネリック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