22

从 C 中调用 Lua 函数相当简单,但有没有办法将 Lua 函数存储在某个地方以备后用?我想存储传递给我的 C 函数的用户定义的 Lua 函数以用于事件,类似于Connect 函数在 wxLua 中的工作方式。

4

3 回答 3

26

检查注册表 ( luaL_ref())。它管理一个简单的表,让您可以存储任何 Lua 值(如函数),并通过简单的整数从 C 中引用它。

于 2009-02-10T17:27:31.850 回答
15

基于 Javier 的回答,Lua 有一个特殊的通用可访问表,称为注册表,可通过 C API 使用 pseudo-index 进行访问LUA_REGISTRYINDEX。您可以使用该luaL_ref函数在注册表中存储您喜欢的任何 Lua 值(包括 Lua 函数),并从 C 中接收可用于引用它的整数:

// Assumes that the function you want to store is on the top of stack L
int function_index = luaL_ref(L, LUA_REGISTRYINDEX);
于 2009-04-04T20:18:52.853 回答
0

最简单的方法是让您的函数采用“名称”和 lua 函数文本。然后在解释器中创建一个表(如果它不存在),然后使用命名参数将函数存储在表中。

在您的应用程序中,只需保留与每个事件相关的函数名称列表。当事件触发时,只需调用表中键与列表中名称匹配的所有函数。

于 2009-02-10T17:31:01.437 回答