Допустим, у нас есть таблица, которая была передана функции, и теперь она находится на вершине стека следующим образом:
// -1 = table
Можно ли получить метатабель из этой таблицы в стеке? Я могу просто получить его с идентификатором известного имени, например, так:
luaL_getmetatable(L, "Foo");
Но я хочу повторно использовать функцию и получить метатаблицу из таблицы, которая находится в стеке.
Вероятно, есть простой способ сделать это, но я не могу найти функцию для этого.
использование lua_getmetatable
скорее, чем luaL_getmetatable
, lua_
версия эквивалентна getmetatable()
в Lua, т.е. он получает метатаблицу из значения в стеке. 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 и толкает ничего такого если у него нет метатаблицы — вместо того, чтобы нажимать ноль, как, например, lua_getglobal
делает.
Других решений пока нет …