我有一个在Lua堆栈上的表。如何推入一个返回这个表的函数到堆栈上?

使用 C API,我已经将一个表格推入了 Lua 栈。如何将返回这个表格的函数推入栈中?

我能找到的最接近的方法是 lua_pushcclosure,但是它会推入一个 lua_CFunction 到栈中,而不是一个真正的 Lua 函数,在我的情况下这是不可接受的,因为我后来想使用 setfenv,而它只能用于真正的 Lua 函数。

谢谢。

点赞
用户734069
用户734069

你需要做的很简单。由于它必须是一个“真正的Lua函数”,你必须创建一个返回该表的真正的Lua函数。

像这样的:

local tbl = ...
return function() return tbl end

这是一个Lua块,当执行时,将返回一个返回使用原始块调用的第一个参数的函数。

所以只需使用 luaL_loadstring 加载该字符串。使用你的表调用结果,返回值将是你需要的函数。

话虽如此,你的问题最终没有意义。在返回本地表的函数设置环境将不会影响存储在该表中的任何内容。

2015-12-08 19:17:26
用户4847311
用户4847311

关于这个毫无意义的问题,我知道 setfenv 没有任何作用。

status = luaL_dostring(L, "return function (ppp) return function () return ppp end end");
if (!status) {
    // 在这里压入表
    status = lua_pcall(L, 1, LUA_MULTRET, 0);
}
2017-01-11 10:44:28