Lua table.getn()返回0?

我已经将Lua嵌入到我的C应用程序中,并试图找出为什么在我的C代码中创建的表通过:

lua_createtable(L, 0, numObjects); 

并且返回Lua,当我调用以下内容时将产生零结果:

 print("Num entries", table.getn(data)) 

(其中“data”是由lua_createtable创建的表)

表中有明显的数据,因为我可以通过以下方式遍历每个条目(字符串:userdata)对:

 for key, val in pairs(data) do ... end 

但是为什么table.getn(data)返回零? 当我用lua_createtable创建它时,是否需要在表的元数据中插入一些东西? 我一直在寻找lua_createtable使用的例子,我没有看到这在任何地方都做过….

table.getn (你不应该在Lua 5.1+中使用。使用长度运算符# )返回表格数组部分中的元素数量。

数组部分是以数字1开头的每个键,并且直到第一个值为nil (不存在)为止。 如果所有键都是字符串,那么表的数组部分的大小为0。

虽然这对于简单列表来说是昂贵的(O(n)vs O(1)),但您还可以添加一种方法来计算地图的元素:

 >> function table.map_length(t) local c = 0 for k,v in pairs(t) do c = c+1 end return c end >> a = {spam="data1",egg='data2'} >> table.map_length(a) 2 

如果您有这样的要求,并且您的环境允许您这样做,请考虑使用提供此类function的 笔灯等等。

#运算符(和table.getn)有效地返回数组部分的大小(虽然当你有一个多孔的表时,语义更复杂)

它不计算表的哈希部分中的任何内容(例如,字符串键)

 for k,v in pairs(tbl) do count = count + 1 end