为什么这个Lua表中只有4个字段?不应该有7个?

Tok*_*Dan 2 lua lua-table

为什么这个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? 
Run Code Online (Sandbox Code Playgroud)

我认为polyline[2]会索引到"厚度",这是此表中的第二个字段.

sbk*_*sbk 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}
               }
Run Code Online (Sandbox Code Playgroud)

这解释了输出print(polyline[2].x)(同样,Lua表中的表字段没有任何排序; pairs允许以任何顺序枚举它们).至于table.maxn:

[table.maxn]返回给定表的最大正数字索引,如果表没有正数字索引则返回零.(为了完成它的工作,这个函数对整个表进行线性遍历.)

所以输出又是正确的.该表确实包含7个字段,但table.maxn根本不返回字段总数.