Lua C API: Удалить метатаблицу, созданную с помощью luaL_newmetatable? - PullRequest
2 голосов
/ 17 февраля 2011

Как я могу удалить метатабельный foo, созданный с помощью luaL_newmetatable( L, "foo" );, чтобы luaL_getmetatable( L, "foo" ); снова выдавал значение NIL?

1 Ответ

4 голосов
/ 17 февраля 2011

Какой бы ни была причина, по которой вам, возможно, придется удалять метатаблицу, это возможно. luaL_newmetatable(L, "foo") создает таблицу, которая хранится в реестре Lua с ключом "foo".

Чтобы удалить таблицу, просто установите поле "foo" в реестре на nil. Код в С:

lua_pushnil(L);
lua_setfield(L, LUA_REGISTRYINDEX, "foo");

Эквивалентный код в Lua:

debug.getregistry()["foo"] = nil
...