假设我们有一个传递给函数的表,它现在位于堆栈顶部,如下所示:
// -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,则返回 1 并推送元表,如果没有元表,则返回 0 并且不推送任何内容——而不是像例如那样推送 nil lua_getglobal
。