在Lua中,因为函数也是第一类值,所以会出现将函数作为另一个函数的参数,或者函数作 为函数的返回值。这种在Lua自身的 环境中使用,自然没有问题。上面的方法有个很严重的问题,在多次调用wrap函数后,将导致全局表也随之膨胀。我们需 要想办法在C/C++完成回调后,来清除wrap建立的数据。这个工作当然可以放到C/C++来进行 ,例如每次发生回调后,就设置下全局表。但这明显是不对的,因为违背了接口的设计原则 ,这个额外的机制是在Lua里添加的,那么责任也最好由Lua来负。这个机制可以在Lua内部发生特定事件时,让应用层得到通知。Lua中只要有__call metamethod的值,均可被当作函数调用。其背后的设计思想,着实让人佩服。
暂无评论