【问题标题】:How to return a multidimensional table from C function to lua? [duplicate]如何将多维表从 C 函数返回到 lua? [复制]
【发布时间】:2013-12-09 01:12:53
【问题描述】:

我需要像这样向 Lua 返回一个表:

{
    [0] = { ["field1"] = "1", ["field2"] = "2" , ["field3"] = "3" },
    [1] = { ["field1"] = "10" , ["field2"] = "20", ["field3"] = "30" }
}

但是从 C 的角度来看并使用 lua_* 函数 此外,0 和 1 只是一个示例,它可能包含更多类似的数组。 谁能帮帮我?

【问题讨论】:

  • 为什么被标记为c++
  • 我把它标记为 c,不是吗?

标签: c arrays lua lua-table


【解决方案1】:

使用lua_createtable()lua_pushnumber()lua_setfield()lua_settable() 的简单示例。

我假设您正在编写某种包装器。不过还是差不多的。

/* Pushes multidimentional table on top of Lua VM stack. */
int
l_push_multidim_table(lua_State *L)
{
    /* Creates parent table of size 2 array elements: */
    lua_createtable(L, 2, 0);

    /* Puts key of the first child table on-top of Lua VM stack: */
    lua_pushnumber(L, 1);

    /*Creates first child table of size 3 non-array elements: */
    lua_createtable(L, 0, 3);

    /* Fills the first child table: */
    lua_pushnumber(L, 1);
    lua_setfield(L, -2, "field1");

    lua_pushnumber(L, 2);
    /* setfield() pops the value from Lua VM stack. */
    lua_setfield(L, -2, "field2");

    lua_pushnumber(L, 3);
    lua_setfield(L, -2, "field3");

    /* Remember, child table is on-top of the stack.
     * lua_settable() pops key, value pair from Lua VM stack. */
    lua_settable(L, -3);

    /* Pushes they key value for the second child table: */
    lua_pushnumber(L, 2);

    /*Creates second child table of size  3 non-array elements: */
    lua_createtable(L, 0, 3);

    /* Fills the second child table: */
    lua_pushnumber(L, 10);
    lua_setfield(L, -2, "field1");

    lua_pushnumber(L, 20);
    lua_setfield(L, -2, "field2");

    lua_pushnumber(L, 30);
    lua_setfield(L, -2, "field3");

    /* Remember, child table is still on-top of the stack.
     * lua_settable pops the key, value pair from Lua VM stack
     * And puts child table into the parent. */
    lua_settable(L, -3);

    /* Returns number of output tables:
     * (1 multidimentional)            */
    return 1;
}

注意:在 Lua 数组中,值通常从 1 开始。所以,我已经以这种方式修改了您的示例结构。总而言之,它应该运作良好。

【讨论】:

    猜你喜欢
    • 2012-12-08
    • 2012-10-30
    • 1970-01-01
    • 2014-07-23
    • 2011-11-20
    • 2018-12-06
    • 1970-01-01
    • 2018-11-24
    • 2013-08-13
    相关资源
    最近更新 更多