Lua table.getn()返回0?

时间:2012-03-08 05:31:13

标签: c lua

我已将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使用的例子,我没有在任何地方看到过这个......

4 个答案:

答案 0 :(得分:24)

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

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

答案 1 :(得分:3)

虽然这对于简单列表而言代价很高(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

如果您有此类要求,并且您的环境允许,请考虑使用提供penlightthat kind of features等等。

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

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