如何通过for循环从C函数将一个表格的表格返回给Lua

我有一个 std::list 的对象列表,我想给 Lua 一个函数来返回它的多维位置。所以我需要创建一个表的表:

{{1,2,3...,512}, {1,2,3...,512},...,512}

lua_newtable(L);

    for (int i = 0; i < 512; i++)
    {
        lua_newtable(L);

        lua_pushnumber(L, pos[i]);
        lua_rawseti(L, -2, i);
        lua_rawseti(L, -2, i+1);

        for (int j = 0; j < 512; j++)
        {
                //pos[i][j]
        }
    }

我想尝试试错,但由于我现在不知道如何调试它,所以我真的很迷茫。

点赞
用户1190388
用户1190388

我认为你想创建一个大小为 512x512 的嵌套表(或矩阵)。

static int CreateMatrix( lua_State *L ) {
    lua_newtable( L );
    for( int i = 0; i < 512; i++ ) {
        lua_pushnumber( L, i + 1 );    // 父表索引
        lua_newtable( L );             // 子表
        for( int j = 0; j < 512; j++ ) {
            lua_pushnumber( L, j + 1 );  // 这将是子表的索引
            lua_pushnumber( L, j + 1 );  // 这将是子表的值
            lua_settable( L, -3 );
        }
        lua_settable( L, -3 );
    }
    return 1;
}

当然,你可以使用自己的值和索引。

2015-08-15 21:35:08
用户2726734
用户2726734

由于您事先知道表的大小,因此可以使用 lua_createtable 来避免重新分配内存,并使用 rawseti 来减少一些开销。

static int make_matrix(lua_State *L) {
    lua_createtable(L, 512, 0);
    for (int i = 0; i < 512; ++i) {
        lua_createtable(L, 512, 0);
        for (int j = 0; j < 512; ++j) {
            lua_pushnumber(L, i + j);  // 将某个值推入栈中,例如 "pos[i][j]"
            lua_rawseti(L, -2, j + 1);
        }
        lua_rawseti(L, -2, i + 1);
    }
    return 1;
}
2015-08-17 13:47:29