![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Lua学习笔记
文章平均质量分 78
Majin_2.0.exe
所学隔山海,山海皆可平
展开
-
Lua 协同程序coroutine(转载)
前言Lua协同程序: 开启另一个逻辑处理和c#一样,同一时间只能有一个协同程序被执行线程:同一时间,可以有多个线程执行进程:线程的一个载体,一个程序的运行独立为一个进程,进程和进程之间都有自己独立的储存单元、一个进程可以包含多个线程、多个线程之间共享存储单元。比如打开一个手机游戏,这个游戏就有一个进程,游戏内部有很多线程同时运行,线程都有一个共享单元来获取存储数据Lua中协同程序的所有函数都被放进一个叫coroutine的表(table)中Lua中协同程序的4种状态: 运行、挂起、死亡、正常一转载 2021-07-02 16:28:54 · 127 阅读 · 0 评论 -
Lua中保留X位小数的实现方案
在使用Lua进行开发的时候,经常会遇到保留n位小数的问题,这里以保留两位小数为例,记录一下需要注意的地方!在选择处理方案之前,首先要确认需求,搞清楚保留两位小数是指小数点后第三位四舍五入还是从小数点后第三位开始直接舍去!Case 1Desc小数点后第三位四舍五入Methodstring.format("%.2f", num)Demolocal num1, num2 = 0.1234, -1.5678print(string.format("%.2f", num1), string.form原创 2021-07-02 16:03:11 · 233 阅读 · 0 评论 -
Lua中使用点号与冒号的区别
Lua中使用点号(.)与冒号(:)的区别在于:在函数定义的时候使用:会默认接收self参数;在函数调用的时候使用:会默认传递调用者自己为参数;在函数定义和调用的时候使用.则需要显式接收或者传递self参数。local test = {} function test:funcA() print("I`m funcA")end function test.funcB(self) print("I`m funcB")end test:funcA()test.funcA原创 2021-07-02 15:58:34 · 778 阅读 · 0 评论 -
Lua错误处理
为什么需要错误处理机制在真实的系统中程序往往非常复杂,它们经常涉及到文件操作、数据库事务操作或网络服务调用等,这个时候错误处理就显得非常重要。不关注错误处理可能在处理诸如涉密或金融交易这些业务时造成重大的损失。无论什么时候,程序开发都要求小心地做好错误处理工作。在 Lua 中错误可以被分为两类:语法错误运行时错误语法错误语法错误是由于不正确的使用各种程序语法造成的,比如错误的使用操作符或表达式。下面即是一个语法错误的例子:a == 2 -- E:\lua-5.3.5_bin\lua原创 2021-07-02 15:32:00 · 519 阅读 · 0 评论 -
Lua OS库整理
Lua OS库整理os.clock()返回一个程序使用CPU时间的一个近似值local x = os.clock();print("---begin----",os.clock())local s = 0;for i = 1, 100000000 do s = s + i;endprint("---end----",os.clock())print(string.format("程序用时 : %.2f\n", os.clock() - x));os.date()返回一个原创 2021-07-02 11:36:32 · 1082 阅读 · 0 评论 -
Lua中string库以及应用
Lua中string库以及应用一、不需要模式匹配的函数1. string.byte() —— 字符转换为编码(ASCII码)原型:string.byte (s [, i [, j] ])函数返回字符s[i], s[i+1], ···, s[j]的内部数字编码(ASCII码),其中参数i的默认值是1,而参数j的默认值是ilocal str = "012abcd"print("\n常规1~4的编码(012a):")print(string.byte(str,1,4))-- 字符串处理库的所有原创 2021-06-30 11:21:36 · 1258 阅读 · 0 评论 -
Lua 基础知识、数据类型和基本语法
Lua 基础知识、数据类型和基本语法一、基础知识特性轻量级可拓展支持面向过程编程和函数式编程自动内存管理闭包和多线程应用场景游戏开发独立应用脚本Web 应用脚本扩展和数据库插件如:MySQL Proxy 和 MySQL WorkBench安全系统,如入侵检测系统为什么Lua可以进行热更新?Lua是使用C写的脚本语言,在运行时读入Lua编写的代码,在解释Lua时不是翻译为机器码,而是使用C代码进行解释,不用开辟可执行权限的内存空间,也不会有新代码执行,执行解释的是用C语言原创 2021-06-30 10:27:27 · 229 阅读 · 0 评论 -
Lua 实现 class类
Lua没有类这一说,本身是不能像C++那样直接实现继承,但我们可以用万能的table表来接近实现类的功能,实现面向对象类的实现由两种,一种是纯copy所有的域,还有一种是元表访问,只有修改时才会在当前类真的添加父类的键,而不是修改父类的,这里用的是元表访问一、Lua 实现 class 的基本方式众所周知,lua 可以通过元表来实现一些骚操作,目前主流的 class 实现也是通过元表来实现的。local t = {}local mt = { __index = { a = 1原创 2021-06-29 21:14:58 · 4178 阅读 · 0 评论 -
Lua 几种常用的数据结构实现
一、链表(linked list)function TestLinked() local list = nil print("生成链表Begin") for i = 10, 1, -1 do print("向链表的头部添加:",i) list = { next = list ,value = i} end print("生成链表End") print("打印链表:") local ret = "" l原创 2021-06-29 17:36:37 · 262 阅读 · 0 评论 -
Lua 元表、元方法的总结整理
项目组中使用的cocos2dx-lua 框架,经常看到的类也是由cocos2dx-lua 的 function class(classname, …) 实现的,依据这个去看了Lua元表和元方法,但是看的是云里雾里,现在记录下来,以后有深入学习时再回过头来看看一、元表(metatable)理解现在我们访问一个表,但是我们不小心访问到了空值,那么就会返回一个nil,当我们访问表中的空值的时候,不想接收一个nil,想接收一个默认值,此时就需要就会用到元表了。先看一个例子: local t = {} loc原创 2021-06-29 16:55:35 · 552 阅读 · 0 评论 -
lua math.floor 误差和浮点型精度问题
问题出现:在项目中之前完成的一个精灵汇总属性展示的需求,今天测试突然提了个bug:如某A号精灵 攻击力为 :20.50某B号精灵 攻击力为 :17.98汇总的总攻击力应该是: 38.48,但实际上得到的是 38.47实现代码大概是这样的:local num1 = 38.48 print("num1 = "..num1) -- num1 = 38.48local num2 = math.floor(num1 * 100)/100print("num2 = "..num2)原创 2021-06-28 20:58:04 · 2504 阅读 · 0 评论 -
lua number类型详解(转载)
lua number类型详解和math.floor存在误差的问题一、Lua number数据类型lua的number类型,是默认当成双精度浮点类型来运算的。也就是说number会底层当做double类型来处理,精度是16~17位在Lua 5.2及之前的版本中,所有的数值双精度类型的实浮点数格式表示从Lua 5.3版本开始,Lua语言为数值格式提供了两种选择:整型值:称为interger的64位整型浮点型值:称为float的双精度浮点类型二、类型判断type()函数使用type原创 2021-06-28 17:52:46 · 3735 阅读 · 0 评论