【问题标题】:Lua C API - Getting metatable from a table on stackLua C API - 从堆栈表中获取元表
【发布时间】:2013-10-03 04:24:07
【问题描述】:

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

// -1 = table

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

luaL_getmetatable(L, "Foo");

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

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

【问题讨论】:

    标签: c++ lua metatable


    【解决方案1】:

    使用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 时推送元表,如果没有元表则返回 0 并推送 nothing - 而不是推送 nil,例如, lua_getglobal 会。

    【讨论】:

      猜你喜欢
      • 2021-06-13
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 2023-03-31
      • 1970-01-01
      • 2021-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多