関数に渡されたテーブルがあり、次のようにスタックの一番上にあるとしましょう。
// -1 = table
スタック上のそのテーブルからメタテーブルを取得することは可能ですか? 次のように、既知の名前の識別子を使用して簡単に取得できます。
luaL_getmetatable(L, "Foo");
しかし、関数を再利用して、スタック内のテーブルからメタテーブルを取得したいと考えています。
おそらくこれを行う簡単な方法がありますが、これを行う関数が見つからないようです。
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
。