我在 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。
使用 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。