使用C
API,我在 Lua 堆栈上推了一个表。如何在返回该表的堆栈上推送一个函数?
我能找到的最近的是lua_pushcclosure
,但是它会在堆栈上推送lua_CFunction
,而不是真正的 Lua 函数,这在我的情况下是不可接受的,因为我想稍后使用setfenv
,这只适用于真正的 Lua 函数。
此致
答案 0 :(得分:0)
嗯,你做的很明显。因为它必须是一个真正的Lua函数",你必须创建一个返回表格的真实Lua函数。
这样的事情:
local tbl = ...
return function() return tbl end
这是一个Lua块,在执行时,将返回一个函数,该函数返回调用原始块的第一个参数。
所以只需使用luaL_loadstring
加载该字符串即可。用你的桌子调出生成的夹头;返回值将是您想要的功能。
话虽如此,你的问题最终没有意义。 setfenv
在这里不会有任何有价值的东西。设置返回本地表的函数的环境不会影响在表中存储的任何内容。
答案 1 :(得分:0)
老问题,但我现在按照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而不会导致崩溃。