5

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

// -1 = table

是否可以从堆栈中的该表中获取元表?我可以简单地使用已知名称标识符来获取它,如下所示:

luaL_getmetatable(L, "Foo");

但我想重用该函数并从堆栈中的表中获取元表。

可能有一种简单的方法可以做到这一点,但我似乎找不到为此的功能。

4

1 回答 1

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,则返回 1 并推送元表,如果没有元表,则返回 0 并且不推送任何内容——而不是像例如那样推送 nil lua_getglobal

于 2013-09-27T01:26:06.030 回答