2009-02-10 94 views

回答

23

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

+2

Lua的裁判是太酷了 - 不能相信我一直在使用Lua而不知道这个功能。谢谢! – 2009-02-16 19:44:14

0

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

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

+0

Javier说这个功能已经存在,并且是Lua的参考表。 – 2009-02-10 17:38:38

13

基于Javier的回答,Lua有一个特殊的通用表,称为注册表,可通过C API使用伪索引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);