2014-10-30 21 views
5

Come posso ottenere una dimensione di una tabella Lua in C?Ottieni dimensioni tabella Lua in 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); 
    ... 
} 

My Code Lua:

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

lstage.buildpollingtable(stages) 

E'stampa 0 sempre. Che cosa sto facendo di sbagliato?

+0

"Dimensioni di una tabella" è uno strano termine da utilizzare. Stai ottenendo la lunghezza della sequenza in una tabella (eventualmente 0), se la tabella ha una sequenza come definita nel manuale, altrimenti indeterminata. –

risposta

5

lua_objlen restituisce la lunghezza dell'oggetto, non spinge nulla in pila.

Anche se ha inviato qualcosa nello stack, la tua chiamata lua_tointeger sta utilizzando l'indice della tabella e non qualsiasi cosa lua_objlen avrebbe inserito nello stack (se ha premuto qualcosa in primo luogo, cosa che non lo fa).

Si desidera size_t len = lua_objlen(L,1); per lua 5.1.

oppure size_t len = lua_rawlen(L,1); per lua 5.2.

+1

In realtà, il tipo è 'size_t'. Inoltre, poiché Lua 5.2 il nome è 'lua_rawlen': http://www.lua.org/manual/5.2/manual.html#lua_rawlen – Deduplicator

+0

IMPRESSIONANTE! Grazie @Etan !! – Crasher

4

Nel codice fornito, è sufficiente sostituire lua_objlen(L,1) con lua_len(L,1).

lua_objlen e lua_rawlen restituiscono la lunghezza e non la lasciano in pila.

lua_len non restituisce nulla e lascia la lunghezza in pila; rispetta anche i metametri.