本来打算3天将lua学完,无奈lua语法实在有点难记,所以还是好记性不如烂笔头,记录一下学习内容。 首先介绍一下lua的table,这是一个key-value型映射,可以动态增长。功能十分强大,并且lua只提供这一种容器。这也是为啥经常忘记的原因,因为仔细学起来有很多东西需要思考。 1. table之数组 这里的数组就是最简单的用整数来索
转载
2024-04-25 12:36:10
101阅读
lua中表的实现原理为:按照key的数据类型分成数组部分和散列表部分,数组部分用于存储key值在数组大小范围内的键值对,其余数组部分不能存储的键值对则存储在散列表部分。表的数据结构typedef struct Table {
CommonHeader;
lu_byte flags; /* 第8位为0,则表示alimit为数组的实际大小,否则需重新计算 */
lu_byte lsize
转载
2024-03-20 14:32:36
190阅读
可以通过元表来修改一个值的行为,使其在面对一个非预定义的操作时执行一个指定的操作。当Lua试图将两个table相加时,它会先检查两者之一是否有元表,然后检查该原表中是否有一个叫__add的字段。 Lua在创
转载
2024-03-25 20:37:01
114阅读
c++和java语言机制中本身带有面向对象的内容,而lua设计的思想是元编程,没有面向对象的实现。但是利用lua的元表(matetable)机制,可以实现面向对象。要讲清楚怎样实现lua面向对象,需要讲清楚以下内容。1.lua元表 2.类和对象 3.继承 1.lua元表lua里的所有数据结构都是表。metatable可以改变table的行为。例如加法行为,table本身没有加法行为。可
转载
2024-04-02 22:09:56
73阅读
最近项目中用到了table.sort,发现在某些情况下自定义的排序函数中会报nil的错误,理论上对table中元素排序是不可能出现nil的。有个同事找到了一篇文章,讲的是lua的快排有个默认规则。在自定义排序函数中,当排序条件都相同的情况下必须返回false,否则就可能访问越界造成nil。 后来处于好奇我去看了下源码,确实是有这样的规则。但是原来学习C++的时候也写过快排的例子,并没有这种
转载
2024-03-19 10:19:28
165阅读
Lua的表本质其实是个类似HashMap的东西,其元素是很多的Key-Value对,如果尝试访问了一个表中并不存在的元素时,就会触发Lua的一套查找机制,也是凭借这个机制,才能够实现“面向对象”的。举例说明:tempTable = {} print(tempTable.memberA) --这里试图打印tempTable并不存在的成员
转载
2024-04-19 13:14:29
75阅读
简单来说就是table.sort的第二个参数支持自定义比较函数,这类似于c++的容器支持自定义比较函数一样,代码如下: local tbTest = {
{1, 3},
{3, 5},
{5, 4},
{2, 3},
}
-- 比较函数
function cmp(a, b)
return a[2] < b[2]
end
-- 通常用法
table.
转载
2024-03-21 19:31:12
34阅读
Lua的表本质其实是个类似HashMap的东西,其元素是很多的Key-Value对,如果尝试访问了一个表中并不存在的元素时,就会触发Lua的一套查找机制,也是凭借这个机制,才能够实现“面向对象”的。举例说明: tempTable = {}
print(tempTable.memberA) --这里试图打印tempTable并不存在的成员memberA 执行结果:nil输出为nil的原因
转载
2024-04-28 20:45:47
41阅读
lua table排序 table的sort函数 比如按照大小进行排序,下面这种写法在某些情况下可能会排序错误,甚至报 这是为什么呢? 当两个值相等时,lua的规定只能返回false,不能返回true。 因为sort函数里面要写清楚所有的情况,比如上面的,如果 和Lua的规则不相符会报错,这里需要对
原创
2021-07-20 16:57:58
1163阅读
一维数组
array = {"Lua", "Tutorial"}
for i= 0, 2 do
print(array[i])
end
多维数组
array = {}
for i=1,3 do
array[i] = {}
for j=1,3 do
array[i][j] = i*j
end
转载
2024-04-03 00:03:37
129阅读
table在lua中是一个重要的数据结构,使用起来非常灵活,可以用它表示通常的array,map,set等结构。在分析源码之前,先看看table的一些特性。 (1). table是个key-value数组,索引key可以是数字,也可以是字符串。 (2). Key为数字时,默认下表从1开始(c/c++从0开始) (3). table大小可以动态变化 (4). Lua5.2.3中table有7
转载
2024-03-06 15:58:55
28阅读
table类型实现了“关联数组”。“关联数组”是一种具有特殊索引方式的数组。不仅可以通过证书来索引它,还可以使用字符串或其他类型(除了nil)来索引它。table是Lua中主要的数据结构机制(事实也是仅有的),具有强大的功能。基于table可以以一种简单、统一和高效的方式来表示普通数组、符号表、集合、记录、队列和其他数据结构。table的特性:table是一个“关联数组”,数组的索引可以是数字或者
转载
2024-03-20 15:26:29
73阅读
table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。Lua table 是不固定大小的,你可以根据自己需要进行扩容。Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。 例如string.format表示使用"format
转载
2024-08-22 09:43:02
42阅读
元表的作用在于对于两个表之间的操作,改变table的行为。1.设置/获取元表mytable={}mymetatable={}mytable=setmetatable(mytable,mymetatable)将mymetatable设置为mytable的元表。返回值为普通表mymetatable=getmetatable(mytable)获取mytable的元表,返回值为元表2.__index元方法
转载
2024-03-28 13:31:12
87阅读
# 从架构层面杜绝lua中使用未定义的变量标签(空格分隔): lua---lua中有一个很坑的地方:1.就是如果一个变量拼写错误,会自动的认为你定义了一个值为nil的全局变量.2.如果在function中定义一个局部变量,忘记了local,则会默认为是定义成为了一个全局变量.为了防止这种问题,我今天想到一个解决方案.可以达到以下效果:1.在function中使用一个未定义的变量时则报错.2.在fu
转载
2024-08-03 15:03:11
37阅读
1. 什么是table是Lua里最强大的数据类型,我们可以当成是数组,但是它又和数组有点不一样,建议大家看看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以及table。Lua 中的每个值都可以有一个 元表 。 这个 元表 就是一个普通的 Lua 表,它用于定义原始值在特定操作下的行为。例如,当你对非数字值做加操作时, Lua 会检查该值的元表中的 "__add" 域下的函数。 如果能找到,
转载
2024-02-11 15:04:04
151阅读
Lua元表2.7.1 元表创建2.7.1 __index 元方法2.7.2 __newindex 元方法 在 Lua table 中我们可以访问对应的key来得到value值,但是却无法对两个 table 进行操作。因此 Lua 提供了元表(Metatable),允许我们改变table的行为,Lua中的每个值都可以用一个metatable来表示,每个行为则关联了对应的元方法。 2.7.1 元表
转载
2024-03-24 09:22:05
183阅读
又有同事在lua的table长度问题上犯错了,我们一起来看看吧~~~看以下代码:local tblTest1 =
{
1,
2,
3
}
print(table.getn(tblTest1)) 这段代码输出的结果是3,这个大家都知道,是吧。不管最后那个3后面有没有加逗号,结果都是3。 再看下面的代码:local tblTest2 =
{
转载
2024-02-15 10:18:04
184阅读
文章目录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阅读