2009-09-13 79 views
13

我有一个函数嵌套在一组表中。在C/C++中有一种方法可以获取对该函数的“引用”,并在需要使用它时将它(和参数)推入堆栈中?在C/C++中引用Lua函数

回答

20

这就是reference system的用途。函数调用r = luaL_ref(L, LUA_REGISTRYINDEX)将值堆栈顶部的值存储在注册表中,并返回一个整数,该整数可以存储在C端并用于通过函数调用lua_rawgeti(L, LUA_REGISTRYINDEX, r)检索该值。

查看PiL chapter,以及luaL_ref(),lua_rawgeti()luaL_unref()的文档全文。

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推入全局,或者如果这不适用于具有单个表条目的新表。当你稍后想要参考时,只需从全球获得。

例如

// Final table reference is now at top of stack, after multiple dereferences 
lua_setglobal(L, "mytableref"); 
+0

我已经知道如何做到这一点:)我想在表格中深入地获取一个引用嵌套函数的函数,以便稍后可以在不遍历所有这些表的情况下调用该函数。 – jameszhao00 2009-09-13 15:54:19

+0

[添加到答复] – 2009-09-13 17:01:57