热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

lua注册二级函数

添加lua模块一般是用到一级路劲下的函数。类似math.sqrt(2)。但有些场景下一个大模块下会有很多小模块,如下。mod.mod0.fun(),mod.mod1.fun()实现

添加lua模块一般是用到一级路劲下的函数。类似 math.sqrt(2)。

但有些场景下一个大模块下会有很多小模块,如下。

mod.mod0.fun(),mod.mod1.fun()

实现代码如下:

c


static int mod_fun(lua_State *L)
{return 0;
}static const luaL_Reg mod0_lib[] =
{{"fun1", mod_fun},{"fun2", mod_fun},{"status",NULL},{NULL, NULL}
};
static const luaL_Reg mod2_lib[] =
{{"fun1", mod_fun},{"fun2", mod_fun},{"status",NULL},{NULL, NULL}
};
static const luaL_Reg module_lib[]=
{{"mod1",NULL},{"mod2",NULL},{"fun",mod_fun},{NULL,NULL},
};static int luaopen_modlib(lua_State *L)
{//mod模块名称在执行函数前已压入栈中 栈地址 1luaL_newlib(L, module_lib); //创建table,当前栈地址为 2lua_newtable(L);//创建table 当前栈地址为3luaL_setfuncs(L,mod0_lib,0);//给table添加函数列表lua_pushinteger( L, 1002 );//顶部压栈整数 当前栈4lua_setfield( L, 3, "id" );//给mod0 table中id赋值栈顶数据并移除栈顶数据 当前栈3lua_setfield(L, 2, "mod1");//给mod table中mod1赋值为上栈顶table 并移除//当前栈顶为2 lua_newtable(L);luaL_setfuncs(L,mod2_lib,0);lua_pushinteger( L, 1003 );lua_setfield( L, 3, "id" );lua_setfield(L, 2, "mod2");//当前栈顶为2lua_pushinteger( L, 1001 );lua_setfield( L, 2, "id" );//栈顶为2 //退出时必须保证栈顶table不变 关联函数luaL_requiref就可以知道原因return 1;
}

 lua代码


for k, v in pairs(module) doif type(v) == "table" thenprint(k, ".................")for k0, v0 in pairs(v) doprint("", k0, v0)endelseprint(k, v)end
end

执行结果


mod2 .................fun1 function: 080226abstatus falseid 1003fun2 function: 080226ab
fun function: 080226ab
id 1001
mod1 .................fun1 function: 080226abstatus falseid 1002fun2 function: 080226ab

 


推荐阅读
author-avatar
手机用户248覀9795477
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有