我在 Lua 堆栈上有一个 table。如何将 returns 这个 table 的函数压入堆栈?

I have a table on the Lua stack. How can I push a function on the stack that returns this table?

使用 C API,我已将 table 压入 Lua 堆栈。如何将 returns 这个 table?

的函数压入堆栈

我能找到的最接近的是 lua_pushcclosure,但它会将 lua_CFunction 压入堆栈,而不是真正的 Lua 函数,在我的例子中这不是 acceptable 因为我想稍后使用 setfenv,它只适用于真正的 Lua 函数。

此致

好吧,你做的很明显。由于它必须是 "real Lua function",因此您必须创建一个 return 是 table 的真实 Lua 函数。

像这样:

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

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

所以只需使用 luaL_loadstring 来加载该字符串。用你的 table 调用生成的卡盘; return 值将是您想要的功能。

话虽这么说,你的问题最终没有任何意义。 setfenv 不会在这里完成任何有价值的事情。设置 return 为本地 table 的函数的环境不会影响 table.

中存储的任何内容

老问题,但我现在按照 Etan 的建议添加正确答案。

status = luaL_dostring(L, "return function (ppp) return function () return ppp end end");
if (!status) {
    // push table here
    status = lua_pcall(L, 1, LUA_MULTRET, 0);
}

关于这个问题没有意义,我知道 setfenv 没有效果。

我唯一的要求是可以在不导致崩溃的情况下执行 setfenv。