//遍历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;
}




最新文章

  1. android环境下的即时通讯
  2. C语言 教学实践建议
  3. htop查看系统负载
  4. BZOJ 3670 &amp;&amp; BZOJ 3620 &amp;&amp; BZOJ 3942 KMP
  5. Volley网络连接
  6. Python入门(四,高级)
  7. CentOS 7安装iptables服务,以及常用命令
  8. (转载)Unity3d摄像机Camera参数详解
  9. 利用UIBezierPath实现一个带圆角的视图
  10. VS2010在网络共享目录使用IntelliSense、ipch、sdf和SQL Compact Server相关问题
  11. signalr中Group 分组群发消息的简单使用
  12. Printer for Me
  13. okio:定义简短高效
  14. 转载 linux基本操作
  15. ES6使用fetch请求数据
  16. ELASTICSEARCH 搜索的评分机制
  17. &#12304;&#36716;&#12305;&#20026;&#20160;&#20040;Github&#27809;&#26377;&#35760;&#24405;&#20320;&#30340;Contributions
  18. sqoop定时增量导入导出
  19. Python: 合并拼接字符串join()| format() | +
  20. 背景JS动态网格特性

热门文章

  1. reset slave
  2. git基础代码获取
  3. python + QML程序中调用WebView后打包
  4. C 数值类型与字节数组相互转化
  5. 第九章:用Python处理省份城市编码数据
  6. mybatis中多条件模糊查询不显示数据的问题
  7. ptyhon基础课程_2
  8. VS2019编译Qt4.8.7
  9. 蓝牙信标、智能楼宇应用国产低功耗芯片BLE5.2 PHY6252
  10. TIDB-DM数据迁移第一部(安装部署)