2014-10-30 11 views
5

Jak mogę uzyskać rozmiar tabeli Lua w C?Pobierz tabelę wielkości Lua w C

static int lstage_build_polling_table (lua_State * L) { 
    lua_settop(L, 1); 
    luaL_checktype(L, 1, LUA_TTABLE); 
    lua_objlen(L,1); 
    int len = lua_tointeger(L,1); 
    printf("%d\n",len); 
    ... 
} 

mój kod Lua:

local stages = {} 
stages[1] = stage1 
stages[2] = stage2 
stages[3] = stage3 

lstage.buildpollingtable(stages) 

its drukowanie 0 zawsze. Co ja robię źle?

+0

"Rozmiar stołu" to dziwny termin, którego należy użyć. Otrzymujesz długość sekwencji w tabeli (prawdopodobnie 0), jeśli tabela ma sekwencję zdefiniowaną w instrukcji, inaczej nieokreślona. –

Odpowiedz

5

lua_objlen zwraca długość obiektu, nie przesuwa nic na stosie.

Nawet jeśli coś wcisnęło na stos, twoje połączenie lua_tointeger wykorzystywało indeks tabeli, a nie to, co lua_objlen popchnąłoby na stos (jeśli cokolwiek zepchnęło, a tego nie zrobiło).

Chcesz size_t len = lua_objlen(L,1); dla lua 5.1.

Lub size_t len = lua_rawlen(L,1); dla lua 5.2.

+1

W rzeczywistości typem jest "size_t". Ponadto, od Lua 5.2 nazwa jest "lua_rawlen": http://www.lua.org/manual/5.2/manual.html#lua_rawlen – Deduplicator

+0

NIESAMOWITE! Dzięki @Etan !! – Crasher

4

Podany kod należy zastąpić lua_objlen(L,1) numerem lua_len(L,1).

lua_objlen i lua_rawlen Zwróć długość i nie zostawiaj jej na stosie.

lua_len nic nie zwraca i pozostawia długość na stosie; szanuje także metametody.