如何把lua的函数作为回调函数当参数传给c代码
最近一段时间在lua的新闻组总是碰到这样的问题了。游戏中类似的问题很多,比如设置trigger,当玩家升级死亡的时候调用脚本函数。
初级方法,全局的LuaState,全局函数,把函数名注册到trigger中去。
进一步,希望支持匿名函数或者closure,那么用luaL_ref把函数记录下来并注册
更进一步,希望支持coroutine,那么把LuaState和ref一起注册
注意到,在coroutine也要记录注册的对象,在coroutine结束的地方需要取消注册。如果不这么做,而是武断的:
co = nil
collectgarbage 'collect'
此时当然会crash!