5

関数に渡されたテーブルがあり、次のようにスタックの一番上にあるとしましょう。

// -1 = table

スタック上のそのテーブルからメタテーブルを取得することは可能ですか? 次のように、既知の名前の識別子を使用して簡単に取得できます。

luaL_getmetatable(L, "Foo");

しかし、関数を再利用して、スタック内のテーブルからメタテーブルを取得したいと考えています。

おそらくこれを行う簡単な方法がありますが、これを行う関数が見つからないようです。

4

1 に答える 1

5

lua_getmetatableではなく使用しluaL_getmetatableます。バージョンはLualua_と同等です。つまり、スタック上の値からメタテーブルを取得します。バージョンは、以前に で登録されたメタテーブルを (名前で) 検索するためgetmetatable()のものです。luaL_luaL_newmetatable

あなたの場合は、次のようになります。

// push the table
lua_getmetatable(L, -1);
// table is still on the stack at -2
// its metatable on top of it at -1

lua_getmetatable()値にメタテーブルがある場合は 1 を返し、メタテーブルをプッシュし、メタテーブルがない場合は 0 を返し、何もプッシュしないことに注意してください。たとえば nil をプッシュするのではありませんlua_getglobal

于 2013-09-27T01:26:06.030 に答える