|
Hans van der Meer wrote:
Trying to find in C program the length of a table with lua_objlen that returned zero, though there are entries in the table (I made them myself). Testing in the lua interpreter gives the following results I cannot explain:Lua 5.1.3 Copyright (C) 1994-2008 Lua.org, PUC-Rio > local io = require "io" print(io, #io) table: 0x102080 0 > local ta= {"a","b","c"} print(ta, #ta) table: 0x107af0 3
This is correct according to the reference manual:
The length of a table t is defined to be any integer index n such that t[n] is not nil and t[n+1] is nil; moreover, if t[1] is nil, n may be zero. For a regular array, with non-nil values from 1 to a given n, its length is exactly that n, the index of its last value. If the array has "holes" (that is, nil values between other non-nil values), then #t may be any of the indices that directly precedes a nil value (that is, it may consider any such nil value as the end of the array).
The io table has no entries with integer indices. There are a number of ways that you can get the total number of entries in a table. Following is one, I'm sure others will post better techniques:
-- tab is the name of the table whose size you want function tabLen(tab) local count = 0 table.foreach(tab, function(k,v) count = count+1 end) return count end -- Matt