Lua
fightsyj
任时光流转,仍初心不忘!
展开
-
Lua string.format() 使用整理
在使用 Lua 进行实际开发的过程中,格式化字符串的函数 string.format() 的使用频率是非常高的,这里整理一下关于这个函数的使用。string.format(formatstring, ···)formatstring 为格式化串(必须是一个字符串),其中可能包含多个转义码(例如最为常用的 %d %s 等)。... 为数量不定的参数列表,以逗号分隔,与格式化串中的转义码一一对应。e.g.print(string.format("%s Have %d Olympic Gold Med原创 2021-09-11 21:42:09 · 6402 阅读 · 2 评论 -
Lua 使用 os.time 获取时间戳需谨慎
1、使用 os.time() 获取当前系统时间戳可以放心大胆的使用,不会出问题!print("curTimeStamp->", os.time())2、使用 os.time({timeTbl}) 获取指定日期的时间戳就需要注意了:指定日期必须是在 1970-01-01 08:00:00 之后才能获取到时间戳,否则返回 nil 。print(os.time({year = 1970, month = 1, day = 1, hour = 8, min = 0, sec = 0}))原创 2021-06-23 16:47:15 · 8079 阅读 · 0 评论 -
Lua 字符与ASCII码互转
字符转ASCII码string.byte(s[,i[,j]])返回字符s[i],s[i+1],... ,s[j]的内部数字编码。i的默认值是1;j的默认值是i。print(string.byte("a"))print(string.byte("fightsyj", 1, 5))-- 97-- 102 105 103 104 116ASCII码转字符string.char(···)接收零或更多的整数。返回和参数数量相同长度的字符串。其中每个字符的...原创 2021-03-02 16:08:03 · 6391 阅读 · 0 评论 -
Lua do-end
在 Lua 中,使用 do-end 将一条或多条语句包起来作为一个语句块儿(block),形成一个作用域,在这个作用域中定义的局部变量只在当前作用域有效,出了作用域之后就会被垃圾回收器自动回收!当然,在这个作用域中定义的全局变量不受作用域的影响!...原创 2020-12-16 16:54:25 · 1974 阅读 · 0 评论 -
Lua中保留两位小数
在使用Lua进行开发的时候,经常会遇到保留n位小数的问题,这里以保留两位小数为例,记录一下需要注意的地方!在选择处理方案之前,首先要确认需求,搞清楚保留两位小数是指小数点后第三位四舍五入还是从小数点后第三位开始直接舍去!Case 1Desc小数点后第三位四舍五入Methodstring.format("%.2f",num)Demolocal num1, num2...原创 2020-04-18 11:41:46 · 20779 阅读 · 0 评论 -
Lua中字典型table的增删操作
tabletable(表)是Lua中一种基础且使用频率极高的数据结构,他的本质是“关联数组”!根据内部元素的不同,我们一般可以将table分为数组型table和字典型(键值对型)table:数组型table:将元素的值顺序存储到table中,元素的索引为从1开始连续递增的整数。例如:arrayTbl={3,5,7}arrayTbl对应的key为:1,2,3字典型...原创 2020-01-03 21:02:05 · 3087 阅读 · 0 评论 -
Lua中loadstring的使用
Lua中loadstring的使用引子分析实现溯源引子将一个table类型的字符串转成table!例如:"{id=1,num=666}"->{id=1,num=666}分析如果暴力解析这个字符串,也是可以将这个table解析出来的,但是这种做法太莽了,当table的结构比较复杂的时候,就有点蛋疼了!使用loadstring就优雅多了...原创 2019-10-24 08:55:06 · 7109 阅读 · 0 评论 -
Lua中的require与package.loaded
require (modname)原创 2019-05-19 20:33:05 · 9732 阅读 · 0 评论 -
Lua之面向对象的实现
Lua本身是不支持面向对象的,但是可以利用table和元表、元方法进行面向对象的模拟!以下是Cocos2d-lua中面向对象的实现:classfunction class(classname, ...) local cls = {__cname = classname} local supers = {...} for _, super in ipairs(supe...原创 2019-05-18 17:32:27 · 1048 阅读 · 0 评论 -
Lua之元表和元方法
元表Lua中的每个值都可以有一个元表!这个元表就是一个普通的Lua表,它用于定义原始值在特定操作下的行为。如果你想改变一个值在特定操作下的行为,你可以在它的元表中设置对应域。例如当你对非数字值做加操作时,Lua会检查该值的元表中的"__add"域下的函数。如果能找到,Lua则调用这个函数来完成加这个操作。在Lua中,你不可以改变表以外其它类型的值的元表(除非你使用调试库),若想改变这些非表...原创 2019-05-18 10:43:11 · 892 阅读 · 0 评论 -
Lua错误处理之error、assert、pcall和xpcall
Lua错误处理errorassertpcallxpcallerrorerror (message [, level])中止上一次保护函数调用,将错误对象 message 返回。 函数 error 永远不会返回。当 message 是一个字符串时,通常 error 会把一些有关出错位置的信息附加在消息的前头。 level 参数指明了怎样获得出错位置。 对于 level 1 (默认值),出错...原创 2019-05-17 21:58:37 · 6369 阅读 · 0 评论 -
Lua中使用math.floor产生bug的问题
引子:local testNum1 = 38.48print("testNum1 = ", testNum1)local testNum2 = testNum1 * 100print("testNum2 = ", testNum2)local testNum3 = math.floor(testNum2)print("testNum3 = ", testNum3)--[[...原创 2019-05-09 08:49:32 · 4755 阅读 · 3 评论 -
Lua中的尾调用与尾递归
尾调用何为尾调用?当一个函数是另一个函数的最后一个动作时,该调用就是一条尾调用!e.g.function testFuncA(arg) print(arg)endfunction testFuncB() local str = "尾调用test" return testFuncA(str) -- 函数testFuncB的最后一步操作是调用函数tes...原创 2019-03-08 19:38:48 · 2588 阅读 · 0 评论 -
Lua打印堆栈信息
debug.traceback([thread,] [message[, level]])如果message有,且不是字符串或nil,函数不做任何处理直接返回message。否则,它返回调用栈的栈回溯信息。字符串可选项message被添加在栈回溯信息的开头。 数字可选项level指明从栈的哪一层开始回溯 (默认为 1 ,即调用traceback的那里)。方法使用print(debug....原创 2019-03-06 20:18:01 · 18202 阅读 · 0 评论 -
Lua 小技巧总结
1、变量名一般用小驼峰命名法,如userName;类名一般用大驼峰命名法,如LoginView!2、Lua中有一种特殊的变量名:_,常用来表示可以被忽略的、不会使用到的变量,常使用在循环中!local testTbl = {id = 1, num = 666, level = 100}-- _是一个特殊的变量,代表遍历的时候不会使用keyfor _, v in pairs(test...原创 2019-02-20 20:03:07 · 1771 阅读 · 0 评论 -
Lua迭代器pairs与ipairs的区别
pairs:pairs会输出table中的值和键值对,并且在输出的过程中先按顺序输出值,再乱序输出键值对。ipairs:ipairs并不会输出table中存储的键值对,会跳过键值对,然后按顺序输出table中的值。遇到nil结束遍历!local testTbl = {"hello", num = 666, "world", nil, level = 100, "abc"}for k,...原创 2019-01-21 23:31:43 · 1818 阅读 · 0 评论 -
Lua基础之运算符
运算符Lua中的运算符一般包括这四类:算术运算符、关系运算符、逻辑运算符和其他运算符!算术运算符Lua中的算术运算符如下:一元运算符:-(负号)二元运算符:+(加)、-(减)、*(乘)、/(除)、^(幂)、%(取余)local a, b = 10, 3print(-a, -b) -- 负号print(a + b) -- 加print(a - b) -- 减p...原创 2019-01-20 21:25:42 · 2093 阅读 · 0 评论 -
Lua基础之数据类型
数据类型Lua是动态类型(运行时)的语言,变量不需要类型定义,只需要为变量赋值!在Lua中有8个基本类型分别为:nil、boolean、number、string、userdata、function、thread和table。nil一个未被赋值的变量默认为nil,将一个变量赋值为nil可以删除这个变量!local testprint(type(test)) -- nil...原创 2019-01-20 17:42:25 · 2844 阅读 · 0 评论 -
Lua中使用点号与冒号的区别
Lua中使用点号(.)与冒号(:)的区别在于:在函数定义的时候使用:会默认接收self参数; 在函数调用的时候使用:会默认传递调用者自己为参数; 在函数定义和调用的时候使用.则需要显式接收或者传递self参数。local test = {}function test:funcA() print("I`m funcA")endfunction test.funcB(self)...原创 2019-01-11 20:16:32 · 3095 阅读 · 0 评论 -
Lua中尽量不要使用os.clock(),有坑
在游戏开发的时候,偶尔会遇到需要对按钮点击添加cd的需求,那么就需要比较两次点击之间的时间间隔!首先想到的就是使用Lua中的系统函数os.clock()。os.clock()返回程序使用的按秒计CPU时间的近似值。那么就可以很愉快的搞定这个需求了:local test = {}function test:clickBtn() local curTime = os.cl...原创 2019-01-11 01:40:36 · 15861 阅读 · 0 评论 -
Lua中使用table.concat连接大量字符串
在使用Lua的过程中,当遇到需要连接大量字符串的时候,尽量不要使用字符串连接符..进行连接,因为Lua中的字符串是不可变的,每进行一次连接就会复制生成一个新的字符串,随着字符串的长度越来越长,复制操作也会越来越耗时!这种情况采用table.concat进行连接效率会高很多!table.concat(list[, sep[, i[, j]]])提供一个列表,其所有元素都是字符串或数字,返回字...原创 2019-01-10 21:39:57 · 4722 阅读 · 0 评论 -
Lua打印table的工具函数dump
在Lua中,print是不能直接打印出table里面的数据的,如果用循环遍历打印遇到嵌套table的话也是很不友好的!local tblTest = {1, a = {111, 222}, "ccc"}print(tblTest)-- table: 00A17E20for k, v in pairs(tblTest) do print(k, v)end--[[1 12 c...原创 2018-12-27 21:25:13 · 9588 阅读 · 0 评论 -
Lua中时间函数的用法整理
os.time([table])1、不传参数,返回当前系统时间的时间戳!print("os.time()->", os.time())-- os.time()-> 15454723202、传入一个table,返回table内容所表示时间的时间戳!这个table必须包含域year、month和day,还可以包含hour、min、sec以及isdst,关于这些域的详细描述如...原创 2018-12-22 21:47:51 · 10692 阅读 · 0 评论 -
Lua handler的使用
在使用Lua进行开发的过程中,经常会遇到需要回调函数的情况,就是将一个函数作为参数传入,在特定事件触发的时候调用这个函数!这时候,handler函数就能发挥作用了,handler函数定义如下:function handler(obj, method) return function(...) return method(obj, ...) endend可...原创 2018-12-19 00:44:23 · 5174 阅读 · 0 评论 -
Lua中实现字符串分割函数split
方法一:function split(input, delimiter) input = tostring(input) delimiter = tostring(delimiter) if (delimiter == "") then return false end local pos, arr = 0, {} for st, sp in func...原创 2018-12-18 20:35:44 · 16700 阅读 · 3 评论 -
Lua中忽略字符串首尾的空白字符
空白字符一般包括空格、换行符\n、制表符\t以及回到行首符\r,当然如果有特殊需求需要将其他的字符也当做空白字符也都是可以的!-- 忽略字符串头部的空白字符function ltrim(input) return (string.gsub(input, "^[ \t\n\r]+", ""))end-- ltrim testlocal test1 = " h...原创 2018-12-17 21:36:34 · 9807 阅读 · 0 评论 -
Lua中的浅拷贝和深拷贝
浅拷贝在Lua中,使用赋值运算符"="进行浅拷贝的时候,分两种情况:1、拷贝对象的类型是string、number、boolean这些基本类型的时候,会进行复制,创建一个新的对象,拷贝出来的对象和原来的对象互不影响,所以修改拷贝出来的对象的值不会影响到原来的对象的值!2、拷贝对象的类型是table的时候,则是直接进行引用,拷贝出来的对象和原来的对象实际上是同一个对象,所以修改拷贝出来的...原创 2018-12-17 20:43:12 · 9564 阅读 · 4 评论 -
Lua中模拟三目运算符
Lua的运算符里面是没有三目运算符的,所以只能通过逻辑运算符and和or来模拟实现三目运算符的功能!先了解一下Lua的基本数据类型boolean以及逻辑运算符and和or:booleanfalse:nil和falsetrue:除nil和false之外的都为true,当然0也为trueandA and B:若 A 为 false,则返回 A,否则返回 BorA or ...原创 2018-11-27 02:01:07 · 2912 阅读 · 0 评论 -
Lua table之获取table的长度以及判空
1、获取table的长度:local tbl = {1, nil, a = 2, "b", 55}function getTblLen(tbl) if type(tbl) ~= "table" then print("类型错误") return end local len = 0 for k, v in pairs(tbl)...原创 2018-11-27 00:56:32 · 7663 阅读 · 0 评论 -
Lua table之增删table.insert和table.remove
在使用Lua进行开发的过程中,对table的处理是很频繁的,这里整理一下table.insert和table.remove这两个函数的使用方法以及一些在使用过程中需要注意的地方!table.insert(list, [pos, ]value)在表list中的pos位置插入元素value,并将原来在pos位置以及在pos位置后面的元素往后移。pos为可选参数,默认值是#list+1,所以ta...原创 2018-11-15 21:53:30 · 76789 阅读 · 2 评论 -
Lua table之排序table.sort
在Lua中,对table进行排序一般使用Lua自带的排序函数:table.sort(list[, comp])list为需要排序的目标table,可选参数comp为排序的比较函数!如果不提供比较函数comp,默认将使用标准Lua操作符"<"进行升序排序;如果提供了比较函数comp,就相当于用提供的比较函数comp重载了"<"操作符!下面举例说明一下table.sort的...原创 2018-11-14 23:43:27 · 41243 阅读 · 4 评论 -
Lua中正则表达式的使用整理
在Lua中使用正则表达式进行模式匹配的string库函数有这四个:string.find(str, pattern[, init[, plain]])string.gsub(str, pattern, repl[, n])string.match(str, pattern[, init])string.gmatch(str, pattern)这几个函数的使用方法在前面Lua中s...原创 2018-11-03 13:23:41 · 13207 阅读 · 0 评论 -
Lua中math常用的api整理
在使用Lua进行开发的过程中,经常涉及到一些math数学库,这里对一些使用频率比较高的api进行整理:1、math.min(x, ...)和math.max(x, ...):返回参数中的较小值、较大值。local x, y = 10, 100local min = math.min(x, y)local max = math.max(x, y)print(min, max) --...原创 2018-11-01 19:41:26 · 4635 阅读 · 0 评论 -
Lua中获取字符串长度整理
在Lua中,获取字符串长度我们一般使用#str(不建议使用string.len(str))!local str = "abc"local len = #strprint(len) -- 3str = "你们好"len = #strprint(len) -- 9这里就出现了一个问题:为啥"abc"的长度为3,而"你们好"的长度却是9呢?难道是哪里出问题了?当然不是!其实...原创 2018-10-31 22:58:41 · 43003 阅读 · 5 评论 -
Lua中string常用api用法整理
在使用Lua进行开发的时候,经常会用到一些string的api,这里整理一下Lua中string常用的api的用法:1、string.len(str):计算str的长度。local str = "abc"local len = string.len(str)print(len) -- 3注:在计算字符串长度的时候推荐使用#str,性能更好!local str = "abc...原创 2018-10-30 22:06:21 · 5577 阅读 · 0 评论 -
win下配置Sublime Text的lua运行环境
主要分为两步,第一步需要安装lua,第二步配置Sublime Text。安装lua: 1、下载win下安装lua的应用程序LuaForWindows_v5.1.5-52.exe(可以根据需求下载其他的版本)并安装,安装过程会自动配置环境变量,无需手动添加。 2、安装完成之后查看是否安装成功,在终端输入命令lua,显示lua的版本则说明lua安装成功:...原创 2018-09-09 15:59:51 · 2748 阅读 · 0 评论