2014-10-30 6 views
5

C로 루아 표의 크기를 얻으려면 어떻게해야합니까?루아 표 크기를 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); 
    ... 
} 

내 루아 코드 : 항상 0을 인쇄

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

lstage.buildpollingtable(stages) 

오기 '. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

"테이블의 크기"는 이상한 용어입니다. 테이블에 시퀀스의 길이가있는 경우 (0 일 수도 있음), 그렇지 않으면 불확정합니다. –

답변

5

lua_objlen은 개체의 길이를 반환하므로 스택에 아무 ​​것도 밀지 않습니다.

뭔가를 스택에 넣었더라도 lua_tointeger 호출은 테이블의 인덱스를 사용하지만 lua_objlen이 스택에 밀어 넣었을 때가 아닙니다 (처음에는 아무것도 밀어 넣지 않은 경우).

lua 5.1의 경우 size_t len = lua_objlen(L,1);이 필요합니다.

또는 size_t len = lua_rawlen(L,1); (루아) 5.2.

+1

실제로 타입은'size_t'입니다. 또한, 루아 5.2 이후로 이름은'lua_rawlen'입니다 : http://www.lua.org/manual/5.2/manual.html#lua_rawlen – Deduplicator

+0

AWESOME! 감사합니다 @ 이탄 !! – Crasher

4

코드에서 lua_objlen(L,1)lua_len(L,1)으로 바꿉니다.

lua_objlenlua_rawlen 길이를 반환하고 스택에 두지 마십시오.

lua_len은 아무 것도 반환하지 않고 길이를 스택에 남겨 둡니다. 그것은 또한 metamethods를 존중합니다.