3

Lua スコープに 2 つの C 関数が登録されているとします。

int func1(lua_State* L)
{
    int n = lua_gettop(L);
    // Do sth here...
}

int func2(lua_State* L)
{
    int n = lua_gettop(L);
    // Do sth here...
}

func2質問:以内に電話してもfunc1いいですか?

複数の引数が に渡されると、 で返されるfunc1値が意味をなさないことがわかりました。lua_gettop()func2

たとえばfunc1、私の lua スクリプトで に3 つの引数が渡された場合、lua_gettop()は で 3 を返しfunc1、 で 3 つ以上を返しますfunc2lua_gettop()現在の関数に渡された引数の数を返す必要があるため、これは間違いです。

新しいスタックフレームを設定するなど、呼び出す前にスタックトリックを行う必要がありますfunc2か、それとも単にこれを行うべきではありませんか?

4

2 に答える 2

4

lua_gettop引数の数ではなく、スタック上のアイテムの数を返します。呼び出し元の関数でスタックをいじると、別の C 関数を直接呼び出したときにスタックがぐちゃぐちゃのままになります。

Lua 経由で (たとえば を使用してlua_cpcall) 呼び出すと、独自のスタック状態と Lua 内で指定した引数で開始されます。

于 2015-09-20T17:34:39.493 に答える