ネストされた lua_CFunction 呼び出しを処理する最良の方法は何ですか? 次のような 2 つの関数があるとします。
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 つのオプションは、スタックの最後の要素 (インデックス -1) を使用するように変更することですが、これはfunction2()
、異なる呼び出しスタックを持つさまざまな場所から呼び出される可能性があるため、一般的には解決策ではありません。別の方法は、を置き換えることreturn function2(L);
です
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 を呼び出す推奨される方法/良い方法は何ですか?