lua table操作函数
目录
lua_getfield
lua_setfield
lua_gettable
lua_settable
lua_rawget
lua_rawset
lua_rawgeti
lua_rawseti
区别
lua_getfield
- 原型:void lua_getfield (lua_State *L, int index, const char *k);
- 解释:把 t[k] 值压入堆栈 。
用于获取table中的键值,键k固定为字符串
lua_getglobal(L, "mytable") <== push mytable
lua_getfield(L, -1, "x") <== push mytable["x"],作用同下面两行调用
const char *value= lua_tostring(L, -1) 如果是字符串的值,获取方式
lua_setfield
- 原型:void lua_setfield (lua_State *L, int index, const char *k);
- 解释:这个函数将把这个值弹出堆栈
设置table的键值,键K固定为字符串。设置后建和值都被自动移除堆栈
ua_getglobal(L, "mytable") <== push mytable
lua_pushstring(L, "abc") <== push value "abc"
lua_setfield(L, -2, "x") <== mytable["x"] = "abc", pop value "abc"
lua_gettable
- 原型:void lua_gettable (lua_State *L, int index);
- 解释:将值推到堆栈上,在给定有效索引中值在哪里,在堆栈顶部推入值。t[k]tk
用于获取table中的键值,键k可以为任意类型,键优先压入堆栈
此功能从堆栈中弹出密钥,值在栈顶
lua_getglobal(L, "mytable") <== push mytable
lua_pushnumber(L, 1) <== push key 1
lua_gettable(L, -2) <== pop key 1, push mytable[1]
lua_settable
- 原型:void lua_settable (lua_State *L, int index);
- 解释:作一个等价于 t[k] = v 的操作, 这里 t 是一个给定有效索引 index 处的值, v 指栈顶的值, 而 k 是栈顶之下的那个值。这个函数会把键和值都从堆栈中弹出
lua_getglobal(L, "mytable") <== push mytable
lua_pushnumber(L, 1) <== push key 1
lua_pushstring(L, "abc") <== push value "abc"
lua_settable(L, -3) <== mytable[1] = "abc", pop key & value
lua_rawget
用法同lua_gettable,但更快(因为当key不存在时不用访问元方法__index)
lua_rawset
用法同lua_settable,但更快(因为当key不存在时不用访问元方法__newindex)
lua_rawgeti
必须为数值键
lua_getglobal(L, "mytable") <== push mytable
lua_rawgeti(L, -1, 1) <== push mytable[1],作用同下面两行调用
--lua_pushnumber(L, 1) <== push key 1
--lua_rawget(L,-2) <== pop key 1, push mytable[1]
lua_rawseti
必须为数值键
lua_getglobal(L, "mytable") <== push mytable
lua_pushstring(L, "abc") <== push value "abc"
lua_rawseti(L, -2, 1) <== mytable[1] = "abc", pop value "abc"
堆栈顺序是table在栈低方向,依次时key,value
区别
获取 |
设置 |
||
直接操作键,键不需要压堆栈 |
lua_getfield |
lua_setfield |
键固定位字符串 |
lua_rawgeti |
lua_rawseti |
键固定位数值 |
|
键需要压堆栈,键类型不限定 |
lua_gettable |
lua_settable |
两者的区别没测,未知 |
lua_rawget |
lua_rawset |
lua table操作函数相关推荐
- 【LUA table 移除操作非常慢】
[LUA table 移除操作非常慢] LUA的表有插入和删除两种操作.插入操作非常快,100000次操作都在0.01S左右,而删除操作在表元素大于10000时却急速变慢,测试如下: t = {}lo ...
- openresty开发系列19--lua的table操作
openresty开发系列19--lua的table操作 Lua中table内部实际采用哈希表和数组分别保存键值对.普通值:下标从1开始 不推荐混合使用这两种赋值方式. local color={fi ...
- Lua——table(表)的使用
文章目录 一.基本知识 二.table的构造 1.使用步骤 2.示例演示 三.table的操作 1.操作语法 2.示例演示 一.基本知识 (1)table 是 Lua 的一种数据结构用来帮助我们创建不 ...
- Lua table(表)
table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组.字典等. Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil. Lua ta ...
- lua table.new
网上找的说的很好很透彻,记录一下: table.new(narray, nhash) 两个参数分别代表table里是array还是hash的 table.new(10, 0) 或者 table.ne ...
- lua table源码学习
刚从超市回来,吃了一包樱桃很满足,哈哈,就接着跟着云大哥看看lua table部分的源码: table是lua里唯一暴漏给client的数据结构,肯定是大神们经过精心设计的.对于使用者简单易用,木有S ...
- python中string的操作函数
在python有各种各样的string操作函数.在历史上string类在python中经历了一段轮回的历史.在最开始的时候,python有一个专门的string的module,要使用string的方法 ...
- html表格判断,lua table 长度解析
先来看 lua table 源码长度获取部分(ltable.c) j 是数组部分的长度.首先判断数组长度大于 0,并且数组最后一个是 nil,就用二分法查找,返回长度. 如果 t->node 是 ...
- LUA表与函数的深入理解
LUA表与函数的深入理解 local heroInfo = {}--直接打印 table的名字,就会输出该table的内存地址 print("表地址---------------" ...
最新文章
- 激光雷达和V2X技术
- MFC用代码创建工具栏
- ULONGLONG乘法分析
- 列注释_机器学习 Pandas 03:基础 前16题 ( 带答案、注释 )
- EntityManager:seam新手必读(一)
- 小米、360之后,货拉拉被曝已启动造车项目!官方回应
- Linux下进程的建立 并附Linux exec函数族
- What we learn before born?
- zabbix api 接口的自动化
- 2019最新资料!共7T
- sw如何缩放装配体_solidworks提高大型装配体的展示、设计效率
- css常见样式命名思想
- 单片机c指令右移指令_单片机「5」51单片机指令集(2)
- 算法导论答案(第一章)
- 玩转数据可视化之R语言ggplot2:(四)单一基础几何图形绘制
- MacBook Pro的touchbar疯狂闪烁 通过写程序不断点亮touchbar,从而避免其闪烁
- 并行编程,绝不是你想的那么简单
- java连连看解说_java—连连看-实现消除
- TooManyCells:用于识别与可视化单细胞关系的方法
- 2019年04月01日_拔剑-浆糊的传说_新浪博客