c中遍历lua的表
2024-10-21 17:34:08
//遍历lua表,index为表在栈中的位置
void traverse_table(lua_State* L, int index)
{
lua_pushnil(L);
stack_dump(L);
while (lua_next(L, index))
{
//拷贝一个临时key到栈顶
lua_pushvalue(L, -2);
const char* key = lua_tostring(L, -1);
const char* value = lua_tostring(L, -2);
//std::cout << "key is:" << key << " value is:" << value << std::endl;
printf("key is:%s,value is:%s\n", key, value);
//删除临时key和value
lua_pop(L, 2);
}
stack_dump(L);
}
其中lua_next会把表中的每一个键值对压入到栈上,
用 lua_pushvalue(L, -2);的目的是为了搞一个临时key,不对key直接进行tostring,原因不太了解,参考手册中描述如下:
打印栈中元素(从栈底开始)
void stack_dump(lua_State* L){
printf("\n------ stack dump begin ------\n");
for (int i = 1; i <= lua_gettop(L); ++i){
int t = lua_type(L, i);
switch (t){
case LUA_TNONE:{
printf("LUA_TNONE\n");
}break; case LUA_TNIL:{
printf("LUA_TNIL\n");
}break; case LUA_TBOOLEAN:{
printf("LUA_TBOOLEAN : %s\n", lua_toboolean(L, i) ? "true" : "false");
}break; case LUA_TLIGHTUSERDATA:{
printf("LUA_TLIGHTUSERDATA\n");
}break; case LUA_TNUMBER:{
//整形
if (lua_isinteger(L, i)){
printf("LUA_TNUMBER integer : %lld \n", lua_tointeger(L, i));
}
else if (lua_isnumber(L, i)){
printf("LUA_TNUMBER number: %g\n", lua_tonumber(L, i));
}
}break; case LUA_TSTRING:{
printf("LUA_TSTRING : %s\n", lua_tostring(L, i));
}break; case LUA_TTABLE:{
printf("LUA_TTABLE\n");
}break; case LUA_TFUNCTION:{
printf("LUA_TFUNCTION\n");
}break; case LUA_TUSERDATA:{
printf("LUA_TUSERDATA\n");
}break; case LUA_TTHREAD:{
printf("LUA_TTHREAD\n");
}break; case LUA_NUMTAGS:{
printf("LUA_NUMTAGS\n");
}break; default:{
printf("%s\n", lua_typename(L, t));
}break;
}
} std::cout << "------ stack dump end ------" << std::endl;
}
最新文章
- android环境下的即时通讯
- C语言 教学实践建议
- htop查看系统负载
- BZOJ 3670 &;&; BZOJ 3620 &;&; BZOJ 3942 KMP
- Volley网络连接
- Python入门(四,高级)
- CentOS 7安装iptables服务,以及常用命令
- (转载)Unity3d摄像机Camera参数详解
- 利用UIBezierPath实现一个带圆角的视图
- VS2010在网络共享目录使用IntelliSense、ipch、sdf和SQL Compact Server相关问题
- signalr中Group 分组群发消息的简单使用
- Printer for Me
- okio:定义简短高效
- 转载 linux基本操作
- ES6使用fetch请求数据
- ELASTICSEARCH 搜索的评分机制
- &#12304;&#36716;&#12305;&#20026;&#20160;&#20040;Github&#27809;&#26377;&#35760;&#24405;&#20320;&#30340;Contributions
- sqoop定时增量导入导出
- Python: 合并拼接字符串join()| format() | +
- 背景JS动态网格特性