Lua从C函数返回自定义数据

尽管努力搜索,我无法找到一个有效的 Lua C API 示例,用于从 C 函数调用返回自定义数据的 Lua 函数。 例如,我已注册函数“GetMyVector”,然后从 Lua 中调用它来从 C 中检索信息,我得到的是一个表,但我想得到的是像在 C 中访问结构中的变量一样的访问方式,例如:

local x = GetMyVector()
print(x[1]) -- i
print(x[2]) -- j
print(x[3]) -- k
-- 如何像这样访问它:
print(x.i)
print(x.j)
print(x.k)

我的 C 函数通过 lua_pushnumber 在三维数组中推送矢量:

static int GetMyVector(lua_State *L)
{
    vec3_t vec;
    vec[0] = 1;
    vec[1] = 2;
    vec[3] = 3;
    lua_newtable(L);
    lua_pushnumber(L, vec[0]);
    lua_rawseti(L, -2, 1);
    lua_pushnumber(L, vec[1]);
    lua_rawseti(L, -2, 2);
    lua_pushnumber(L, vec[2]);
    lua_rawseti(L, -2, 3);
    return 1;
}
点赞
用户2939223
用户2939223

你可能需要使用lua_settable。它可以为表设置任何键。如果键是文字,你可以通过 x["i"] 或者 x.i 得到数据。

相关的代码应该如下所示:

static int GetMyVector(lua_State *L)
{
    vec3_t vec;
    vec[0] = 1;
    vec[1] = 2;
    vec[3] = 3;
    lua_newtable(L);

    lua_pushliteral(L, "i");
    lua_pushnumber(L, vec[0]);
    lua_settable(L, -2);

    lua_pushliteral(L, "j");
    lua_pushnumber(L, vec[1]);
    lua_settable(L, -2);

    lua_pushliteral(L, "k");
    lua_pushnumber(L, vec[2]);
    lua_settable(L, -2);
    return 1;
}
2015-03-28 22:01:17