Lua C API - 从堆栈中获取表的元表

假设我们有一个传递给函数的表格,现在它位于堆栈顶部,如下所示:

// -1 = table

是否可能从堆栈中的该表格获取元表?我可以通过已知名称标识符轻松获取它,如下所示:

luaL_getmetatable(L, "Foo");

但我想重复使用函数并从堆栈中的表格获取元表。 可能有一种简单的方法来实现这一点,但我似乎找不到适合的函数。

点赞
用户2755919
用户2755919

使用 lua_getmetatable 而不是 luaL_getmetatablelua_ 版本相当于 Lua 中的 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 并推送 _nothing_,而不是像 lua_getglobal 一样推送 nil。

2013-09-27 01:26:06