从C函数通过for循环返回一个表格的表格给Lua的方法

3

我有一个对象的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]
        }
    }

我会试着通过试错来解决问题,但是由于我现在不知道如何进行调试,所以我真的很迷茫。


2
我认为你应该尝试重新措辞问题,使其更清晰。"它的多维位置"是什么?另外,“对象”是什么?在lua中,您只能推入lua原始类型、函数、用户数据......还有一些其他内容。您想要推送的东西是用户数据吗?还是您手头有其他函数可以知道如何推送它们?这是您正在努力解决的部分,还是主要涉及“如何使用C api创建一个表格的表格”的部分? - Chris Beck
谢谢关注。我会努力学习英语。 - Candy
2个回答

3
我认为你想要创建一个512x512维度的嵌套表格(或矩阵)。
static int CreateMatrix( lua_State *L ) {
    lua_newtable( L );
    for( int i = 0; i < 512; i++ ) {
        lua_pushnumber( L, i + 1 );    // parent table index
        lua_newtable( L );             // child table
        for( int j = 0; j < 512; j++ ) {
            lua_pushnumber( L, j + 1 );  // this will be the child's index
            lua_pushnumber( L, j + 1 );  // this will be the child's value
            lua_settable( L, -3 );
        }
        lua_settable( L, -3 );
    }
    return 1;
}

当然,您可以使用自己的值/索引。

这就是我想要的。谢谢你再次 :) - Candy

1

由于您事先知道表的大小,因此可以使用 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);  // push some value, e.g. "pos[i][j]"
           lua_rawseti(L, -2, j + 1);
        }
        lua_rawseti(L, -2, i + 1);
    }
    return 1;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接