lua5.2模块注册

Lua 5.2推荐使用luaL_newlib进行模块注册,而非luaL_register。luaL_newlib通过luaL_newlibtable创建表并用luaL_setfuncs将函数注册到表中。luaL_setfuncs处理C闭包,当无upvalue时,压入light C function,否则压入C closure,最终形成键值对完成模块注册。
摘要由CSDN通过智能技术生成

    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 < 
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值