目录

lua_getfield

lua_setfield

lua_gettable

lua_settable

lua_rawget

lua_rawset

lua_rawgeti

lua_rawseti

区别


lua_getfield

  1. 原型:void lua_getfield (lua_State *L, int index, const char *k);
  2. 解释:把 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

  1. 原型:void lua_setfield (lua_State *L, int index, const char *k);
  2. 解释:这个函数将把这个值弹出堆栈

设置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

  1. 原型:void lua_gettable (lua_State *L, int index);
  2. 解释:将值推到堆栈上,在给定有效索引中值在哪里,在堆栈顶部推入值。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

  1. 原型:void lua_settable (lua_State *L, int index);
  2. 解释:作一个等价于 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操作函数相关推荐

  1. 【LUA table 移除操作非常慢】

    [LUA table 移除操作非常慢] LUA的表有插入和删除两种操作.插入操作非常快,100000次操作都在0.01S左右,而删除操作在表元素大于10000时却急速变慢,测试如下: t = {}lo ...

  2. openresty开发系列19--lua的table操作

    openresty开发系列19--lua的table操作 Lua中table内部实际采用哈希表和数组分别保存键值对.普通值:下标从1开始 不推荐混合使用这两种赋值方式. local color={fi ...

  3. Lua——table(表)的使用

    文章目录 一.基本知识 二.table的构造 1.使用步骤 2.示例演示 三.table的操作 1.操作语法 2.示例演示 一.基本知识 (1)table 是 Lua 的一种数据结构用来帮助我们创建不 ...

  4. Lua table(表)

    table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组.字典等. Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil. Lua ta ...

  5. lua table.new

    网上找的说的很好很透彻,记录一下: table.new(narray, nhash) 两个参数分别代表table里是array还是hash的  table.new(10, 0) 或者 table.ne ...

  6. lua table源码学习

    刚从超市回来,吃了一包樱桃很满足,哈哈,就接着跟着云大哥看看lua table部分的源码: table是lua里唯一暴漏给client的数据结构,肯定是大神们经过精心设计的.对于使用者简单易用,木有S ...

  7. python中string的操作函数

    在python有各种各样的string操作函数.在历史上string类在python中经历了一段轮回的历史.在最开始的时候,python有一个专门的string的module,要使用string的方法 ...

  8. html表格判断,lua table 长度解析

    先来看 lua table 源码长度获取部分(ltable.c) j 是数组部分的长度.首先判断数组长度大于 0,并且数组最后一个是 nil,就用二分法查找,返回长度. 如果 t->node 是 ...

  9. LUA表与函数的深入理解

    LUA表与函数的深入理解 local heroInfo = {}--直接打印 table的名字,就会输出该table的内存地址 print("表地址---------------" ...

最新文章

  1. 激光雷达和V2X技术
  2. MFC用代码创建工具栏
  3. ULONGLONG乘法分析
  4. 列注释_机器学习 Pandas 03:基础 前16题 ( 带答案、注释 )
  5. EntityManager:seam新手必读(一)
  6. 小米、360之后,货拉拉被曝已启动造车项目!官方回应
  7. Linux下进程的建立 并附Linux exec函数族
  8. What we learn before born?
  9. zabbix api 接口的自动化
  10. 2019最新资料!共7T
  11. sw如何缩放装配体_solidworks提高大型装配体的展示、设计效率
  12. css常见样式命名思想
  13. 单片机c指令右移指令_单片机「5」51单片机指令集(2)
  14. 算法导论答案(第一章)
  15. 玩转数据可视化之R语言ggplot2:(四)单一基础几何图形绘制
  16. MacBook Pro的touchbar疯狂闪烁 通过写程序不断点亮touchbar,从而避免其闪烁
  17. 并行编程,绝不是你想的那么简单
  18. java连连看解说_java—连连看-实现消除
  19. TooManyCells:用于识别与可视化单细胞关系的方法
  20. 2019年04月01日_拔剑-浆糊的传说_新浪博客

热门文章

  1. 正则表达式的正数校验
  2. mac上连接魅族手机
  3. revit2013安装破解教程
  4. 像外行一样思考,像专家一样实践(读书笔记)
  5. 制造业供应链数据分析
  6. 鱼c论坛 python课后题pdf_全套55讲 鱼c论坛小甲鱼python课后题.pdf
  7. EmguCv模板匹配
  8. Mopria Print Service现在可用于统一端点管理解决方案
  9. 华为荣耀10是Android,华为荣耀10怎么样
  10. 关闭 transparent_hugepage 参数