2

Why are there only 4 fields in this Lua table? Shouldn't there be 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? 

I thought polyline[2] would index to "thickness", which is the 2nd field in this table.

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 回答