存储Luafunction?
从C 调用Lua函数是相当简单的,但有没有办法将 Lua函数存储在某处供以后使用? 我想存储传递给我的C函数的用户定义的Lua函数以用于事件,类似于Connect函数在wxLua中的工作方式 。
检查注册表( luaL_ref()
)。 它管理一个简单的表,允许您存储任何Lua值(如函数),并通过一个简单的整数从C引用它。
基于Javier的回答,Lua有一个特殊的通用访问表,称为注册表,可以使用伪索引LUA_REGISTRYINDEX
通过C API访问。 您可以使用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);
最简单的方法是让你的函数采用“名称”和lua函数文本。 然后在解释器中创建一个表(如果它不存在),然后使用named参数将该函数存储在表中。
在您的应用程序中,只需保留与每个事件关联的函数名称列表。 当事件触发时,只需调用表中的所有函数,其中的键与列表中的名称匹配。