2014-10-30 13 views
5

Wie kann ich eine Größe einer Lua Tabelle in C bekommen?Hole Lua Tischgröße 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); 
    ... 
} 

Mein Lua-Code:

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

lstage.buildpollingtable(stages) 

Es ist Druck 0 immer. Was mache ich falsch?

+0

"Größe einer Tabelle" ist ein seltsamer Begriff zu verwenden. Sie erhalten die Länge der Sequenz in einer Tabelle (möglicherweise 0), wenn die Tabelle eine wie im Handbuch definierte Sequenz hat, andernfalls unbestimmt. –

Antwort

5

lua_objlen gibt die Länge des Objekts zurück, es drückt nichts auf dem Stapel.

Auch wenn es etwas auf dem Stapel schieben Ihre lua_tointeger Aufruf verwendet den Index der Tabelle und nicht was auch immer lua_objlen hätte auf den Stapel geschoben (wenn es etwas an erster Stelle geschoben, was es nicht tut).

Sie wollen size_t len = lua_objlen(L,1); für lua 5.1.

Oder size_t len = lua_rawlen(L,1); für lua 5.2.

+1

Eigentlich ist der Typ 'size_t'. Auch seit Lua 5.2 ist der Name 'lua_rawlen': http://www.lua.org/manual/5.2/manual.html#lua_rawlen – Deduplicator

+0

FANTASTISCH! Danke @Etan !! – Crasher

4

In dem Code, den Sie gaben, einfach lua_objlen(L,1) durch lua_len(L,1) ersetzen.

lua_objlen und lua_rawlen geben Sie die Länge zurück und lassen Sie sie nicht auf dem Stapel.

lua_len gibt nichts zurück und lässt die Länge auf dem Stapel; es respektiert auch Metamethoden.