2

この Lua テーブルに 4 つのフィールドしかないのはなぜですか? 7つじゃないの?

   polyline = {color="blue", thickness=2, npoints=4,
                 {x=0,   y=0},
                 {x=10, y=0},
                 {x=-10, y=1},
                 {x=0,   y=1}
               }

print(table.maxn(polyline))    -- returns 4. Why?
print(polyline[2].x)   -- returns 10. Why? 

polyline[2]このテーブルの 2 番目のフィールドである「厚さ」にインデックスを付けると思いました。

4

1 に答える 1

9

おそらく、テーブル コンストラクターの操作マニュアルを読み直す必要があります。要約すると、テーブル内の名前付きフィールド (つまり、色、厚さ、npoints) には数値インデックスが割り当てられておらず、名前だけが割り当てられています。名前を省略すると、1 から始まるインデックスが生成されます。あなたの定義はpolylineこれと同等です:

   polyline = {
                 color="blue", thickness=2, npoints=4,
                 [1] = {x=0,   y=0},
                 [2] = {x=10, y=0},
                 [3] = {x=-10, y=1},
                 [4] = {x=0,   y=1}
               }

これは の出力を説明していますprint(polyline[2].x)(また、Lua テーブルのテーブル フィールドには順序がありません。任意の順序pairsで列挙できます)。に関してはtable.maxn

[table.maxn] 指定されたテーブルの最大の正の数値インデックスを返します。テーブルに正の数値インデックスがない場合はゼロを返します。(その仕事をするために、この関数はテーブル全体を直線的に走査します。)

したがって、出力は再び正しいです。テーブルには実際には 7 つのフィールドが含まれていますが、table.maxnフィールドの総数はまったく返されません。

于 2010-06-24T10:24:53.983 に答える