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

为什么这个 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))    -- 返回4。为什么?
print(polyline[2].x)   -- 返回10。为什么?

我以为 polyline[2] 会索引到字段表中的"thickness",它是这个表中的第二个字段。

原文链接 https://stackoverflow.com/questions/3108738

点赞
stackoverflow用户169828
stackoverflow用户169828

也许你需要重新阅读一下表构造符操作手册。总结一下,在表中命名的字段(即color、thickness、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-24 10:24:53