lua使用table例子
table在Lua中唯一的数据结构,其它语言提供的各种数据结构Lua都是用table来实现的 。下面是一个C API操作table的例子。
#include <stdio.h>
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
int main()
{
lua_State *L;
L = luaL_newstate();
luaL_openlibs(L);
// ta = {'AA', 'BB', {'CC', 'DD'}}
lua_newtable(L);
//依次将各个元素放入table
lua_pushnumber(L,1);
lua_pushstring(L, "AA");
lua_rawset(L,1);
lua_pushnumber(L,2);
lua_pushstring(L, "BB");
lua_rawset(L,1);
lua_pushnumber(L,3);
lua_newtable(L);
lua_pushstring(L, "CC");
lua_rawseti(L,-2,1);
lua_pushstring(L, "DD");
lua_rawseti(L,-2,2);
lua_rawset(L,1);
lua_setglobal(L,"ta");
//此时栈中为空,此处省略其他操作
//将ta压入栈顶
lua_getglobal(L, "ta");
//获得第一个元素
lua_rawgeti(L, 1,1);
if(lua_type(L,-1) == LUA_TSTRING)
printf("%s", lua_tostring(L,-1));
lua_pop(L,1);
lua_rawgeti(L, 1,2);
if(lua_type(L,-1) == LUA_TSTRING)
printf("%s", lua_tostring(L,-1));
lua_pop(L,1);
lua_rawgeti(L, 1,3);
if(lua_type(L,-1) == LUA_TTABLE)
{
//因为第三个元素是table,所以继续获得它的第一个元素
lua_rawgeti(L, -1,1);
if(lua_type(L,-1) == LUA_TSTRING)
printf("%s", lua_tostring(L,-1));
lua_pop(L,1);
lua_rawgeti(L, -1,2);
if(lua_type(L,-1) == LUA_TSTRING)
printf("%s", lua_tostring(L,-1));
lua_pop(L,1);
}
lua_pop(L,1); //此时栈顶为ta
lua_close(L);
}
// -------------------------------------------------------------------------
// @ClientSvr(C/S): S
// @ClassName : --
// @LuaApiName: AddDynamicObstacle
// @Description: 添加一组动态障碍
// @ReturnCode:
// @ArgumentFlag: s table d
// @ArgumentComment: 组名称:不能重复且小于64长度
// @ArgumentComment: 点数组table
// @ArgumentComment: 点数组大小
// @LuaMarkEnd
// -------------------------------------------------------------------------
int LuaAddDynamicObstacle(lua_State* L)
{
Log(eLogInfo, "**************Call script AddDynamicObstacle......");
int nSubWorldID= lua_tointeger(L, 1);
const char* pszName= lua_tostring(L, 2);
int nSize= 0;
XYLOG_FAILED_JUMP(lua_istable(L, 3));
nSize = (int)lua_objlen(L, 3);
XYLOG_FAILED_JUMP(nSize > 0);
for (int i = 1; i <= nSize; i++)
{
int nSubIndex = 0;
int nX = 0;
int nY = 0;
lua_rawgeti(L, 3, i);
nSubIndex = lua_gettop(L);
XYLOG_FAILED_JUMP(lua_istable(L, -1));
lua_rawgeti(L, nSubIndex, 1);
nX = lua_tointeger(L, -1);
lua_rawgeti(L, nSubIndex, 2);
nY = lua_tointeger(L, -1);
Log(eLogInfo, "********* x=%d, y=%d", nX, nY);
}
Log(eLogInfo, "******nSubWorldID=%d, name=%s, size=%d", nSubWorldID, pszName, nSize);
//KSubWorld* pSubWorld = g_SubWorldSet.GetMapByIndex(nSubWorldID);
//if (pSubWorld)
//pSubWorld->AddDynamicObstacle(pszName, points, nSize);
Exit0:
return 0;// /? ReLoadSkill(1,"jhhh", {{2,3},{4,5},{7,9}}) 2.获取到调用者地图 npc身上有
// /? AddDynamicObstacle(1,"ss",{{1,2},{8,188}})
}
明白了:我本省就2个参数压栈,最后自带一个wsId压,3个,lua_rawgeti()会把这个(table)元素压入到栈顶,变成4个元素,
因为栈顶又是个表,所有再次lua_rawgeti(),把这个表的子元素压入到栈顶,然后再取出来,变成6个元素,
下一次遍历的时候,把下一个tab压入栈顶,那就是7了。然后8,9搞定。
5. 对table的一些操作[不引发原方法]
void lua_rawget (lua_State *L, int index)
和lua_gettable操作一样
但是不触发相应的元方法
void lua_rawgeti(lua_State *L, int index, int n)
操作: ele = Stack[index]
value = ele[n]
Stack.push(value)
lua使用table例子相关推荐
- Lua 的table遍历 【转】
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://rangercyh.blog.51cto.com/1444712/1032925 ...
- Lua 之table的测试
一.lua 的 table构造 1.字符串作为table索引 法1. MyTable = {x = "xixi"} 法2. MyTable = {["x"] = ...
- Lua 中 table 库函数 table.concat 连接 函数
Lua 中 table 库函数 table.concat 连接 函数 do--> table.concat 连接 函数 tab = {"a", "c", ...
- lua之table的使用
本文对从数据结构,存储和使用三个角度对lua之table的使用进行小结. 数据结构: table是lua的一种数据结构,可以用来存放各种类型的元素,例如可以创建数组和字典,以及二者混合的数据结构, 例 ...
- 【游戏开发解答】Unity使用lua将table转为树结构,以多级折叠内容列表的UI形式展现(树结构 | UGUI | 折叠展开 | lua)
文章目录 一.前言 二.Unity lua环境 三.树节点 1.创建脚本:TreeNode.lua 2.封装节点 四.树逻辑 1.创建脚本:TreeLogic.lua 2.构造测试数据 3.构造树 4 ...
- lua中table.和table[]的区别
lua中table.和table[]的区别 lua中的table可以定义为如下格式 local tab = { ["one"] = 1, ["two"] = 2 ...
- lua中table的常用方法
转载:https://blog.csdn.net/Fenglele_Fans/article/details/83627021 1:table.sort() language = {"lua ...
- lua的table库中的常用函数总结
table是Lua语言中的一种重要的数据类型, table 的一些特性简单列举如下: (1).table 是一个"关联数组",数组的索引可以是数字或者是字符串; (2).tab ...
- 如何打印出lua里table的内容
不像开发as3时用fb有强大的断点调试功能,一般lua开发不用什么高级的ide,貌似也没有适合的,就直接用sublime.exvim等文本编辑器,直接编译运行看结果.所以不能很方便的知道变量值,特别是 ...
最新文章
- 噪声标签的负训练:ICCV2019论文解析
- Linux系统端口聚合技术bonding
- nrf52840 gpiote如何配置中断输入_STM32第四章外部中断管理
- oshi.systeminfo 获取cpu的数量_CPU 的基础知识
- linux中登录p4后,linux下perforce(p4)的使用方法和命令
- shell执行perl_【编程技巧(一)】在Perl、Shell和Python中传参与输出帮助文档
- python 遍历文件夹
- Android:Android SDK的下载与安装
- html color 转换,Color颜色转换的三种方式(c#)
- git配置ssh秘钥(公钥以及私钥)windows
- MATLAB数学建模教学 | 史上最强的MATLAB学习网站,你需要的这里统统都有!!!
- android x5全屏白色,x5webview 自定义全屏界面
- 修改文件 火车票买下铺_为什么坐火车时,尽量不要买下铺?过来人用亲身经历告诉你原因...
- 前端面试题整理(一)
- Rhino6.9软件安装教程|兼容WIN10
- 像素三国志在线html5小游戏,激萌三国志H5
- python-scikit-learn基础
- 进化三部曲,从互联网大脑发育看产业互联网的未来
- 什么是OSI模型,OSI模型各层的是什么?OSI模型各层的作用是什么?
- 【洛谷 P1710】地铁涨价(dfs+bfs)
热门文章
- 怎样手动删除系统服务项
- 利用第三方后期处理材质(PostProcess Material)对物体进行描边【UE4】【C++】
- 迷你世界电路计算机的过程,迷你世界电路定时器教程 电路定时器怎么做
- mac电脑如何转换图片格式及修改大小?
- “都叫兽”背后的韩国文化
- utrack调试 艾肯icon_Icon Utrack 设置调试以及常用软件设置[超详细]
- GoSurf真是奇怪啊。
- 【洛谷 P3403】跳楼机(SPFA)
- @高职升本考生注意|天津招考资讯网大改版啦!!
- 香!好用图源!ArcGIS、QGIS、奥维、图新...都能免费调用的高清亚米级图源