c 打印lua table结构 lua_next

205 阅读1分钟

在 C 端打印lua- table结构

static void stackDump (lua_State *L) {
    /** -1 处为table */
    int top = mln_lua_gettop(L);
    printf("{\n");
    lua_pushnil(L);
    while (lua_next(L, -2)) {
        /* 此时栈上 -1 处为 value, -2 处为 key */
        
        switch (lua_type(L, -2)) {
            case LUA_TSTRING:
                printf("%s = ", mln_lua_tolstring(L, -2, 0));
                break;
            case LUA_TNUMBER:
                printf("[%td] = ", lua_tointeger(L, -2));
                break;
        }
        
        int t = lua_type(L, -1);
        switch (t) {
            case LUA_TSTRING : {
                printf("'%s'", lua_tostring(L, -1));
                break;
            }
            case LUA_TBOOLEAN : {
                printf(lua_toboolean(L, -1) ? "true" : "false");
                break;
            }
            case LUA_TNUMBER : { //TNUMBER包含两种类型 float和integer
                if (lua_isinteger(L, -1)) //integer
                    printf("%td", lua_tointeger(L, -1));
                else
                    printf("%g", lua_tonumber(L, -1));
                break;
            }
            case LUA_TTABLE: {
                stackDump(L);
            }break;
            default : {
                printf("%s", lua_typename(L, t));
                break;
            }
        }
        lua_pop(L, 1);
    
        printf(",\n");
    }
    
    lua_pop(L, mln_lua_gettop(L) - top);
    
    printf("}\n");
}

see