我有一个函数嵌套在一组表中相对较深。C/C++ 中有没有办法获得对该函数的“引用”并在我需要使用它时将它(和 args)推送到堆栈上?
问问题
5754 次
2 回答
21
这就是参考系统的用途。函数调用r = luaL_ref(L, LUA_REGISTRYINDEX)
将值存储在注册表中的堆栈顶部,并返回一个整数,该整数可以存储在 C 端并用于通过函数调用检索值lua_rawgeti(L, LUA_REGISTRYINDEX, r)
。
请参阅PiL 章节,以及 、 和 的文档以luaL_ref()
获取lua_rawgeti()
完整luaL_unref()
的故事。
于 2009-09-13T19:26:04.280 回答
2
Lua API ( http://www.lua.org/manual/5.1/manual.html#3 ) 可用于访问您想要的任何表成员。使用 lua_gettable() 提取表成员并将其放在 lua 堆栈中,如果成员也是表只需再次调用 lua_gettable() 以访问该表,依此类推...
(取决于你在做什么 lua_rawget() 可能比 lua_gettable() 更好)
回应评论的补充:
好吧,这更有趣了。好吧,表是一个引用对象(或多或少),因此您可能可以安全地将最里面的表引用保存在某处。
由于 lua API 似乎无论如何都无法直接操作表引用,因此您可能必须将引用推送到全局中,或者如果这不适用于具有单个表条目的新表。当您稍后需要参考时,只需从全局获取它。
例如
// Final table reference is now at top of stack, after multiple dereferences
lua_setglobal( L, "mytableref" );
于 2009-09-13T08:02:58.403 回答