问题概要: 用lua写了个函数,返回的是一个表.需要在C里对返回的表里元素做二次处理.
在C里我们可以通过lua_gettable()或者lua_rawget()来获取表里元素值,但使用这两个接口的前提是你得知道key,它才能给你value. 当然对于顺序下标倒无所谓,但恰巧这次我用到的是关联数组,下标是无规则字符串.这时候如何遍历出表里元素就是个问题.
lua_next()就成了比较合适的选择.画了下图对整个逻辑做了解释
上图对简单的表遍历做了介绍, 但事实上的情况是我返回了一个二维表,如果你了解了lua_next()的处理过程,那下面的代码看起来就没什么问题了.
t_idx = lua_gettop(L);
lua_pushnil(L);
while (lua_next(L, t_idx))
{
printf("============================\n");
it_idx = lua_gettop(L);
lua_pushnil(L);
while(lua_next(L, it_idx))
{
printf("%s\n", lua_tostring(L, -1));
lua_pop(L, 1);
}
lua_pop(L, 1);
}
本文仅起个抛砖引玉的作用, 实际上lua的栈逻辑基本就是这样.其他接口的调用方式也很类似.
1.参数压栈
2.call 函数
3.返回值位于栈顶
4.pop返回值
相关推荐
C语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 ...
lua_tinker支持最新Lua5.2 自带6个事例,另外外加VS2005的lua静态LIB标准库。发布时不用跟随Lua.dll。
lua服务器编程 lua端服务器 c++ 服务器
lua调用c++函数的实例,C++工程里使用LUA脚本,lua脚本调用c++工程的函数
更新频率比较慢,使用lua_shared_dict进行存储。如下定义: lua_shared_dict sysconfig 10k; 成员包括: "time":配置文件的生成的时间戳(用来判断文件是否有更新)eg:1585209315 "kxsip":与可信控制服务数据交互...
lua_tinker的改进版,支持lua5.1.4+lua5.2.2
当前版本除了前面几个版本中更新的内容之外,还增加了宏 LUA_COMPAT_5_2 定义修改。 在源码包中,此宏定义在GCC中,打开lua-5.3.4/src/Makefile,可以看到:CFLAGS= -O2 -Wall -Wextra -DLUA_COMPAT_5_2 $(SYSCFLAGS...
在stm32f407开发板上移植lua脚本,实现一些基本功能
Lua语言以其卓越的可扩展性、简单、高效率和与平台无关性在游戏领域得到广泛应用。今天花了一些时间学习VC和Lua如何混合开发,编写了一个小例程,和大家分享一下这方面的经验。
非常好用的lua封装,支持类注册,只有两个文件.嵌套lua到工程的利器,并且对现有工程修改最小,使用最方便.
小型足球比赛Lua调用脚本,有开球,传球,间接任意球,点球,分进攻和防守脚本。在裁判软件控制下,各队伍机器人自动调用脚本。
// lua_next() 会使用栈顶元素作为Key去定位本次需要取出Table里面的那个值对 // 如果Key=nil, 那就表示本次取出的是第一个元素 // 它会先将当前的这个Key弹出,然后将本次取出的Key/Value压入栈, Value在栈顶 // 一...
全新中文高清版Lua_API,全新中文高清版Lua_API,全新中文高清版Lua_API,全新中文高清版Lua_API,
application to decomplier lua 4
将lua嵌入到c/c++ 将lua嵌入到c/c++
在vc++中嵌入动态解析语言Lua的演示代码。
nginx lua module for windows 详细请访问 http://blog.csdn.net/ngwsx/
用LUA实现在stm32平台上的在线编程
使用_cocos2d-x_和_Lua_快速开发游戏.pdf
WEB应用防火墙,利用nginx的组件nginx_lua的组件,利用Lua语言开发的一个防火墙,简单