2014-10-30 15 views
5

Làm thế nào tôi có thể nhận được một kích thước của một bảng Lua trong C?Lấy kích thước bảng Lua trong 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 Mã Lua:

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

lstage.buildpollingtable(stages) 

Nó rất in 0 luôn. Tôi đang làm gì sai?

+0

"Kích thước của một bảng" là một thuật ngữ kỳ lạ để sử dụng. Bạn đang nhận được chiều dài của chuỗi trong một bảng (có thể là 0), nếu bảng có một chuỗi như được định nghĩa trong hướng dẫn sử dụng, nếu không thì không xác định. –

Trả lời

5

lua_objlen trả về chiều dài của đối tượng, nó không đẩy bất cứ điều gì trên stack.

Ngay cả khi nó đã đẩy thứ gì đó lên ngăn xếp, cuộc gọi lua_tointeger của bạn đang sử dụng chỉ mục của bảng và không phải bất cứ thứ gì lua_objlen sẽ đẩy lên ngăn xếp (nếu nó đẩy bất kỳ thứ gì vào vị trí đầu tiên).

Bạn muốn size_t len = lua_objlen(L,1); cho lua 5.1.

Hoặc size_t len = lua_rawlen(L,1); cho lua 5.2.

+1

Thực ra, loại là 'size_t'. Ngoài ra, vì Lua 5.2 tên là 'lua_rawlen': http://www.lua.org/manual/5.2/manual.html#lua_rawlen – Deduplicator

+0

TUYỆT VỜI! Cảm ơn @Etan !! – Crasher

4

Trong đoạn code bạn đã cho, chỉ cần thay thế lua_objlen(L,1) với lua_len(L,1).

lua_objlenlua_rawlen trả về độ dài và không để nó trên ngăn xếp.

lua_len lợi nhuận gì và lá chiều dài trên stack; nó cũng tôn trọng metamethods.

Các vấn đề liên quan