如何从字符串创建 Lua 表格?

我有一个C函数,用于将表格返回给 Lua,但这个表格是从一个字符串中创建的,而不是通过 lua_newtable,如何实现?

int GetTable(lua_State* L)
{
    //这个字符串在运行时生成,所以我不能使用 lua_newtable
    const char* TableFromStr = "{a = 123, b = 456, d = {x = 1, y = 9} }";
    //我想要将表格推到栈顶
    luaL_loadstring(L, TableFromStr);
    //返回 1 个表格,Lua 代码可以获取到此表格
    return 1;
}
点赞
用户2828480
用户2828480

你必须使用 luaL_dostring

https://www.lua.org/manual/5.1/manual.html#luaL_dostring

如果你使用的是 Lua 5.1,请确保 luaL_dostring 被正确定义。参见: http://lua-users.org/lists/lua-l/2006-04/msg00218.html

在 Lua 5.1 中,luaL_dostring 的定义为 luaL_loadstring(L, s) || lua_pcall(L, 0, 0, 0)

因此它忽略返回值。

尝试这样写:

#undef luaL_dostring
#define luaL_dostring(L,s)    \   (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0))

有可能你还要在字符串前加上 return

2018-05-30 14:31:05