lua 5.2不鼓励使用luaL_register把模块注册到全局域,而是使用luaL_newlib。
我们首先看下luaL_newlib,它是一个宏,代码如下:
#define luaL_newlib(L,l) (luaL_newlibtable(L,l), luaL_setfuncs(L,l,0))
luaL_newlibtable创建一个表放到栈顶,然后luaL_setfuncs把列表参数l中的函数名作为key,函数地址用来创建的闭包作为value插入到新建的table中,代码如下:
LUALIB_API void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup) {
for (; l->name != NULL; l++) { /* fill the table with given functions */
int i;
for (i = 0; i <