我有一个相对深入嵌套在一组表中的函数。有没有一种方法可以在C / C ++中获取该函数的“引用”,并在需要使用它时将其(和args)推送到堆栈中?
答案 0 :(得分:21)
这是reference system的用途。函数调用r = luaL_ref(L, LUA_REGISTRYINDEX)
将值存储在注册表中的堆栈顶部,并返回一个可以存储在C端的整数,并用于通过函数调用lua_rawgeti(L, LUA_REGISTRYINDEX, r)
检索该值。
有关完整报道,请参阅PiL chapter以及luaL_ref()
,lua_rawgeti()
和luaL_unref()
的文档。
答案 1 :(得分:2)
Lua API(http://www.lua.org/manual/5.1/manual.html#3)可用于访问您想要的任何表成员。使用lua_gettable()提取表成员并将其放在lua堆栈上,如果该成员也是一个表,只需再次调用lua_gettable()来访问该表,依此类推......
(取决于你正在做什么,lua_rawget()可能是比lua_gettable()更好的选择)
Addtional回应评论:
好的,这有点儿有趣。好吧,表是一个引用对象(或多或少),所以你可以安全地保存最里面的表引用。
由于lua API似乎无法直接操作表ref,因此您可能必须将ref推送到全局,或者如果不能使用单个表条目的新表。如果您以后想要参考,只需从全局获取它。
e.g。
// Final table reference is now at top of stack, after multiple dereferences
lua_setglobal( L, "mytableref" );