【3.lua C模块实例注释】

int luaopen_aoi(lua_State* L) {
    luaL_checkversion(L);
    luaL_Reg l1[] = {
        {"create", aoi_new},
        {NULL, NULL},//哨兵 数组最后总是{NULL,NULL},标识结尾
    };
    luaL_Reg l2[] = {
        {"add", aoi_add},
        {"update", aoi_update},
        {"delete", aoi_delete},
        {"get_pos_nearby_objs", aoi_get_pos_nearby_objs},
        {"get_obj_nearby_objs", aoi_get_obj_nearby_objs},
        {"get_objs_nearby_objs", aoi_get_objs_nearby_objs},
        {NULL, NULL},
    };
    luaL_newmetatable(L, "aoi_meta");   // 1.栈顶压入元表
    luaL_newlib(L, l2);                 // 2.继续压入元表成员函数  luaL_newlib的调用会创建一个表由数值l2填充这个表
    lua_setfield(L, -2, "__index");     // 3.设置元表的__index
    lua_pushcfunction(L, aoi_release);  // 4.压入gc函数
    lua_setfield(L, -2, "__gc");        // 5.绑定gc函数


    luaL_newlib(L, l1);                 // 6.栈顶压入函数
    return 1;
}

按照以上注释顺序来解释栈顶变化
luaL_newmetatable(L, “aoi_meta”);

-1aoi_meta

2.luaL_newlib(L, l2);

-1l2
-2aoi_meta

3.lua_setfield(L, -2, “__index”);

-1aoi_meta.__index = l2

4.lua_pushcfunction(L, aoi_release)

-1aoi_release
-2aoi_meta.__index = l2

5.lua_setfield(L, -2, “__gc”);

-1aoi_meta.__gc = aoi_release
aoi_meta = {
__index = l2,
__gc = aoi_release
}

6.luaL_newlib(L, l1);

-1l1
-2aoi_meta
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值