最近游戏项目改用c++/lua开发,于是开始学习lualua是一种轻量小巧的脚本语言,据说lua是最快的脚本语言也不无道理。这篇文章从lua的数据结构入手,把lua的实现描述出来,加深自己的理解。(lua源码版本为5.2.3)    所谓lua虚拟机其实就是一c的struct结构体(lua_State),所有lua代码都通过解析器加载到lua_S
        在开发 C/C++ 与 Lua 交互程序的过程中,Lua_gettable() 经常会使用,函数声明在 lua.h 里,其实现是在 liblua.a 库里。该函数原型为: int lua_gettable (lua_State *L, int index); Pushes onto the stack the value 
Lua table(表)tableLua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。Lua table 是不固定大小的,你可以根据自己需要进行扩容。Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。 例如string.forma
转载 2024-02-28 22:14:25
141阅读
最近在学习写Kong的插件,作为新手,首先要学习的就是它所使用的编程语言lua,这个语言主要应用在nginx的开发中,Kong作为一API网关系统,有时候需要写一些自定义的插件,所以会涉及到lua语言。这篇文章主要记录学习过程中的一些经验,希望对大家的学习有帮助。Install 安装学习的第一步,肯定是安装对应的开发环境。Lua的开发环境,在不同的操作系统上有不同的安装方法,比较简单
1. 什么是tableLua里最强大的数据类型,我们可以当成是数组,但是它又和数组有点不一样,建议大家看看Lua的语法教程,因为我对table也没有熟悉到可以给大家解释的程度。 2. 获取table变量helloLua.lua文件添加一table全局变量: 1. -- helloLua.lua文件 2. myName = "beauty
转载 2024-02-29 11:03:21
243阅读
lua中的变量是没有数据类型的,值有类型。类型有八种nil,number,boolean, string, function, thread, userdata以及tableLua 中的每个值都可以有一 元表 。 这个 元表 就是一普通的 Lua 表,它用于定义原始值在特定操作下的行为。例如,当你对非数字值做加操作时, Lua 会检查该值的元表中的 "__add" 域下的函数。 如果能找到,
转载 2024-02-11 15:04:04
151阅读
lua中表的实现原理为:按照key的数据类型分成数组部分和散列表部分,数组部分用于存储key值在数组大小范围内的键值对,其余数组部分不能存储的键值对则存储在散列表部分。表的数据结构typedef struct Table { CommonHeader; lu_byte flags; /* 第8位为0,则表示alimit为数组的实际大小,否则需重新计算 */ lu_byte lsize
转载 2024-03-20 14:32:36
190阅读
tableLua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。Lua table 是不固定大小的,你可以根据自己需要进行扩容。Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。 例如string.format表示使用"format
元表的作用在于对于两表之间的操作,改变table的行为。1.设置/获取元表mytable={}mymetatable={}mytable=setmetatable(mytable,mymetatable)将mymetatable设置为mytable的元表。返回值为普通表mymetatable=getmetatable(mytable)获取mytable的元表,返回值为元表2.__index元方法
转载 2024-03-28 13:31:12
87阅读
项目组中使用的cocos2dx-lua 框架,经常看到的类也是由cocos2dx-lua 的 function class(classname, …) 实现的,依据这个去看了Lua元表和元方法,但是看的是云里雾里,现在记录下来,以后有深入学习时再回过头来看看一、元表(metatable)理解现在我们访问一表,但是我们不小心访问到了空值,那么就会返回一nil,当我们访问表中的空值的时候,不想接收
转载 2024-03-20 17:11:52
112阅读
Lua向表内新增元素(N)主要走的是luaH_newkey函数。其过程大体如下: 根据给定的key计算出应该存放的位置P如果P处没有元素,直接存放就好如果P处已经有元素,这时存在两种情况: 在P处发生了碰撞,需要在物理上将N存放到下一空位,并从逻辑上将N连接到P的链表中在别处放生碰撞的元素(O)被放到P处,需要将O移到下一空位,将N存放到P处 可以看到,无论何处发生的碰撞导致P处被占据,
转载 2024-04-06 10:56:44
155阅读
概要:1.table特性;2.table的构造;3.table常用函数;4.table遍历;5.table面向对象1.table特性table是一“关联数组”,数组的索引可以是数字或者是字符串,所有索引值都需要用 "["和"]" 括起来;如果是字符串,还可以去掉引号和中括号; 即如果没有[]括起,则认为是字符串索引table 的默认初始索引一般以 1 开始,如果不写
转载 2024-05-04 14:05:40
56阅读
一、什么是元表Lua 中的 table 使用起来有点像c++中的 map 或者 unordered_map ,都是通过对应的key 获取对应的value。如果访问了表中不存在的key时,就会触发Lua的一种机制,Lua也正是凭借这个机制可以用来模拟类似“继承”的行为,具体可以参考上一篇文章Lua中self 、自索引及其面向对象应用代码示例。元表用来定义一table在面对未知操作时候的行为,比如,
转载 2024-03-17 17:34:39
190阅读
        可以通过元表来修改一值的行为,使其在面对一非预定义的操作时执行一指定的操作。当Lua试图将两table相加时,它会先检查两者之一是否有元表,然后检查该原表中是否有一叫__add的字段。        Lua在创
转载 2024-03-25 20:37:01
114阅读
--[[ Table: 元方法: 当表达式中混合了不同元表的值时, 先看第一值有无对应元表, 没有再看第二对象的. 两对象都没有,应发一错误.  算术类的:__add加法, __mul乘法, __sub减法, __div, __unm(相反数), __mod取模, __pow乘幂, __concat连接操作符 关系类的:__eq等于, __lt小于, __le大于, 其他的进
转载 2024-04-18 14:40:30
51阅读
luatable.getn(t) 、#t、 table.maxn(t) 这三什么区别?RTlocal t = {1,888,x= 999,b=2,5,nil,6,7,[10]=1,8,{z = 1,y = 1},nil,nil}print(table.getn(t))print(#t)print(table.maxn(t))输出:8 8 8------------如果把[10] =1 改成[
转载 2024-05-09 22:01:04
131阅读
c++和java语言机制中本身带有面向对象的内容,而lua设计的思想是元编程,没有面向对象的实现。但是利用lua的元表(matetable)机制,可以实现面向对象。要讲清楚怎样实现lua面向对象,需要讲清楚以下内容。1.lua元表 2.类和对象 3.继承  1.lua元表lua里的所有数据结构都是表。metatable可以改变table的行为。例如加法行为,table本身没有加法行为。可
转载 2024-03-20 22:09:34
75阅读
lua作为游戏的热更新首选的脚本,其优势不再过多的赘述。今天,我主要写一下如何重写lua中的元方法,通过自己的重写来实现对lua中的常用方法特定编写,从而实现对table的重构。 table中关键的一点是使用setmetatable和getmetatable,分别是对table进行元表设置和读取。一、luatable的元方法table中的元方法主要分为算术类和关系类的元方法,算数类元方法可以分为
转载 2024-03-22 09:02:29
224阅读
文章目录1. 元表(Metatable)2. 元方法2.1 __add(对表进行"+"操作时触发)2.1.1 其它操作符的方法2.2.2 注意事项2.2 __tostring (print()时触发)2.3 __index (访问表中不存在属性时触发)2.4 __newindex(对table中不存在的字段赋值时调用) 1. 元表(Metatable)元表是普通的Lua表,定义了原始值在某些特定
转载 2024-02-28 19:31:51
210阅读
    又有同事在luatable长度问题上犯错了,我们一起来看看吧~~~看以下代码:local tblTest1 = { 1, 2, 3 } print(table.getn(tblTest1)) 这段代码输出的结果是3,这个大家都知道,是吧。不管最后那个3后面有没有加逗号,结果都是3。 再看下面的代码:local tblTest2 = {
转载 2024-02-15 10:18:04
184阅读
  • 1
  • 2
  • 3
  • 4
  • 5