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

时间:2013-09-27 01:04:42

标签: c++ lua metatable

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

// -1 = table

是否有可能从堆栈中的表中获取metatable?我可以简单地使用如下的已知名称标识符来获取它:

luaL_getmetatable(L, "Foo");

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

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

1 个答案:

答案 0 :(得分:5)

使用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并在值为1时推送metatable,如果没有metatable则返回0并推送 nothing - 而不是将nil推送为,例如,lua_getglobal会这样做。