处理嵌套的 lua_CFunction 调用的最佳方法是什么?假设我有两个这样的功能:
static int function2(lua_State *L) {
int i = luaL_checkint(L, 1);
/* do something */
return 1;
};
static int function1(lua_State *L) {
struct udata *u = luaL_checkudata(L, 1, UDATA_METATABLE);
int i = luaL_checkint(L, 2);
/* do something */
/* this does not work, first on call stack is udata, not int */
return function2(L);
};
上面的函数调用不起作用。一种选择是修改function2()
以使用堆栈上的最后一个元素(索引 -1),但这通常不是一个解决方案,因为function2()
可能会从具有不同调用堆栈的不同位置调用。另一种方法是替换return function2(L);
by
lua_pushcfunction(L, function2);
lua_pushvalue(L, 2);
lua_call(L, 1, 1); /* need to know number of results */
我假设这提供function2()
了自己的调用堆栈,因此无需修改它。但是对于具有更多参数的函数,这种解决方案似乎过于复杂,因为它需要在堆栈上复制所有这些函数。
tl; dr:lua_CFunction
从另一个内部调用 a 的推荐方式/好方法是什么?