c中遍历lua的表
//遍历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;
}
c中遍历lua的表的更多相关文章
- lua中遍历table的几种方式比较
当我在工作中使用lua进行开发时,发现在lua中有4种方式遍历一个table,当然,从本质上来说其实都一样,只是形式不同,这四种方式分别是: for key, value in pairs(tbtes ...
- C中调用LUA回调(LUA注册表)
实现原理: 通过将LUA中得回调函数存入LUA注册表中来保存LUA函数,然后在需要回调时从LUA注册表中取出LUA函数进行调用 下面是一些预备知识:(学习两个重要的函数) 原汁原味的英文解释的最透彻, ...
- redis中使用lua脚本
lua脚本 Lua是一个高效的轻量级脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能 使用脚本的好处 1.减少网络开销,在Lua脚 ...
- Lua 学习之基础篇四<Lua table(表)>
table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组.字典等. Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil. Lua ta ...
- [PHP内核探索]PHP中的哈希表
在PHP内核中,其中一个很重要的数据结构就是HashTable.我们常用的数组,在内核中就是用HashTable来实现.那么,PHP的HashTable是怎么实现的呢?最近在看HashTable的数据 ...
- Lua查找表元素过程(元表、__index方法是如何工作的)
近日开始研究Lua,在元表的使用上照猫画虎地搞了两下,实现了“面向对象”,但究其本质却略有不解,后咨询牛哥得解,特此记录. Lua的表本质其实是个类似HashMap的东西,其元素是很多的Key-Val ...
- 在 Django 模板中遍历复杂数据结构的关键是句点字符
在 Django 模板中遍历复杂数据结构的关键是句点字符 ( . ). 实例二 mysit/templates/myhtml2.html修改如下 <!DOCTYPE html> <h ...
- C中调用Lua函数
我们先来看一个简单的例子: lua_State* L = NULL; // 内部调用lua函数 double f(double x, double y) { double z; lua_getglob ...
- SLua 中使用 Lua 5.3 的编译工程
2016-03-05 更新: 之前编译的库,在 Android 下 Lua_Number 和 Lua_Integer 被编译为了32位,导致从 C# 到 Lua 过程中有64位到32位整型转换会出现溢 ...
- lua table表
lua table表 语法结构 创建一个 table 直接使用 "{}" 即可 table1 = {} -- 赋值 table1["name"] = " ...
随机推荐
- Less 1-3
LESS-1 首先确认一下是否存在注入,加上?id=1,能够显示数据,然后加一个',出现报错,这样就说明存在注入点.接下来进行报错注入. 输入 ' and updatexml(1,concat(0x7 ...
- 制作 macOS U盘USB启动安装盘方法
制作macOS U盘 1,首先你得有macOS的dmg文件,关于如何取得完整版,我在另一篇 Mac 如何用python下载Mac OS ,大家可以按自所需下载. 2,准备大于8GB U盘.打开 ...
- awk 计算
[root@BJ-DATABASES lastday]# ps -aux| grep nginx|grep -v greproot 13783 0.0 0.0 56796 1208 ? Ss 11:1 ...
- ES、Lucene、Solr的介绍和区别
一.介绍 1.ES Elasticsearch是用Java开发并且是当前最流行的开源的企业级搜索引擎,支持多种语言 2.Lucene Lucene可以被认为是迄今为止最先进.性能最好的.功能最全的搜索 ...
- 软件工程日报六——TextView和button
今天继续学习安卓stduio的知识--TextView和button TextView是安卓stduio中十分重要的一个控件,它可以在安卓应用上显示文字 通过网络我找到了TextView的相关用法如下 ...
- python 的多线程
创建一个多线程 from threading import Thread, ThreadError import time def task_01(): print("开始发送邮件" ...
- zip()
a=[1,2,3,4]b=[5,6,7,8]c=[10,11,12,13]zi=zip(a,b,c)print(list(zi)) 结果 [(1, 5, 10), (2, 6, 11), (3, 7, ...
- 解决Maven资源导出失败问题
由于 maven 的约定大于配置,maven 约定资源或配置文件放在 resources 目录下才能正常导出,但是如果我们将其放在 java 目录下,就需要在 pom.xml 添加如下配置,才能导出资 ...
- weboack5webpack5用url-loader(file-loader)处理字体
file-loader(url-loader)可以用解析打包字体. webpack配置loader \\ webpack.config.js const webpack = require(" ...
- IDEA,Run是灰色无法运行 解决办法
转载地址:https://blog.csdn.net/sinat_39017906/article/details/83717068 找到项目里面的 Structure,点击打开: 然后,选中main ...
