Lua C API — получение метатаблицы из таблицы в стеке

Допустим, у нас есть таблица, которая была передана функции, и теперь она находится на вершине стека следующим образом:

// -1 = table

Можно ли получить метатабель из этой таблицы в стеке? Я могу просто получить его с идентификатором известного имени, например, так:

luaL_getmetatable(L, "Foo");

Но я хочу повторно использовать функцию и получить метатаблицу из таблицы, которая находится в стеке.

Вероятно, есть простой способ сделать это, но я не могу найти функцию для этого.

5

Решение

использование 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 делает.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]