Lua
文章平均质量分 85
讲解Lua的入门基础知识,后续会有Lua的源码深入探索。
ღCauchyོꦿ࿐
二十楼望去,目光所及皆是美景。探出二楼,所见之处满地狼藉。
展开
-
【RPC 协议】序列化与反序列化 | lua-cjson | lua-protobuf
在分布式计算,远程过程调用(英语:Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)的子程序,而程序员就像调用本地程序一样,无需额外地为这个交互作用编程(无需关注细节)。RPC 是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。原创 2023-09-01 14:49:34 · 1361 阅读 · 0 评论 -
【LuaJIT & FFI】优雅的与C交互
LuaJIT和FFI是两个非常强大的工具,它们可以帮助开发人员在Lua中实现高性能的代码。原创 2023-05-16 11:00:00 · 2099 阅读 · 1 评论 -
【C & Lua】C调用Lua | Lua调用C
Lua与C交互是一种非常常见的技术,它可以让我们在C语言中调用Lua脚本,也可以让我们在Lua脚本中调用C语言函数。这种交互方式可以使得我们在不同的编程语言之间实现混合编程,从而达到更高的灵活性和效率。Lua栈是Lua与C交互的核心数据结构,所有的数据交互都是通过Lua栈来完成的。无论是从Lua中调用C函数,还是从C中调用Lua函数,都需要使用Lua栈来传递参数和返回值。原创 2023-05-14 17:00:00 · 1803 阅读 · 0 评论 -
Lua面向对象设计基类
面向对象在前文已经谈过,虽然Lua是一个脚本语言,本就不是为了面向对象而设计的。但是它的元方法可以非常优美的让我们设计出类之间的继承关系,单继承、多继承等。本文就是简单的剖析一下,云风大佬早在十多年前对于Lua面向对象的设计。原创 2023-05-12 13:00:00 · 743 阅读 · 0 评论 -
事件驱动模型
事件驱动是指在持续事务管理过程中,进行决策的一种策略,即跟随当前时间点上出现的事件,调动可用资源,执行相关任务,使不断出现的问题得以解决,防止事务堆积。事件驱动的核心自然是事件,从事件角度说,事件驱动程序的基本结构是由一个事件收集器、一个事件发送器和一个事件处理器组成。比如你现在的鼠标点击,按下鼠标就会产生一个onClick()事件,因为平台有注册相应的回调事件,每当点击就会触发该事件,然后交给对应的事件处理器进行处理。可以忽略一些打印信息的代码,方便之后的输出信息查看,理解运行的逻辑。原创 2022-09-28 08:00:00 · 912 阅读 · 1 评论 -
Lua Table实现经典数据结构 (链表 | 栈 | 双端队列)
【代码】Lua Table实现经典数据结构 (链表 | 栈 | 双端队列)原创 2022-09-27 08:00:00 · 536 阅读 · 0 评论 -
Lua 也可以用来写算法?
Lua 本是一个脚本语言,并不是用于算法竞赛,很多平台并不支持 lua语言。但是如果想用lua练一练语法,我在这里可以推荐一个网站,有兴趣可以在这进行练习。不过最头疼的是这个网站上编码,调试lua代码非常不人性,所以推荐可以使用本地的环境,或者是在线的lua编译器,那么下面就浅浅刷几道题吧。原创 2022-09-26 11:05:07 · 575 阅读 · 0 评论 -
Lua 协程 + 过滤器实现生产者和消费者
Lua还在精进中,期待您的关注~~原创 2022-09-21 10:41:58 · 375 阅读 · 0 评论 -
【Lua 入门基础篇(十三)】面向对象
跟其他语言不同之处在于,Lua中模拟的私有方法并没有确定的归属,换句话说,它只属于其所写的Lua文件,而不是写在文件中的某个Table表。Teacher并没有重写GetAge()方法,然而 t1:GetAge() 却正确的输出了30,所以是正确的继承了这个方法。冒号的作用是省略了self的传递,也就是说,如果我们不想写冒号改为写等号的话,那么每个方法的第一个参数必然是self。而重写的printf()方法,多输出了一个course,也正常输出,可见重写也是可以的。创建对象是为类的实例分配内存的过程。原创 2022-09-09 08:00:00 · 686 阅读 · 0 评论 -
【Lua 入门基础篇(十二)】调试&垃圾回收
如果你把步进倍率设为一个非常大的数字 (比你的程序可能用到的字节数还大 10% ), 收集器的行为就像一个 stop-the-world 收集器。接着你若把间歇率设为 200 , 收集器的行为就和过去的 Lua 版本一样了: 每次 Lua 使用的内存翻倍时,就做一次完整的收集。Lua 中所有用到的内存,如:字符串、表、用户数据、函数、线程、 内部结构等,都服从自动管理。这意味着你不用操心新创建的对象需要的内存如何分配出来, 也不用考虑在对象不再被使用后怎样释放它们所占用的内存。停止垃圾收集器的运行。原创 2022-09-07 08:00:00 · 197 阅读 · 0 评论 -
【Lua 入门基础篇(十一)】错误处理
xpcall和pcall的区别最大的地方是,可以传递一个出错的函数,xpcall接收第二个参数是一个错误处理函数,可以在这个函数中使用debug库来获取关于错误的额外信息了。lua 里调用函数时,即使实参列表和形参列表不一致也能成功调用,多余的参数会被舍弃,缺少的参数会被补为 nil。**功能:**终止正在执行的函数,并返回message的内容作为错误信息(error函数永远都不会返回)pcall以一种"保护模式"来调用第一个参数,因此pcall可以捕获函数执行中的任何错误。原创 2022-09-05 08:00:00 · 688 阅读 · 1 评论 -
【Lua 入门基础篇(十)】文件I/O
这个迭代函数每一次被调用都会返回文件中新的一行的内容,直到文件中所有的内容都被读完。:设置和获取当前文件位置,成功则返回最终的文件位置(按字节),失败则返回nil加错误信息。:返回一个迭代函数,每次调用将获得文件中的一行内容,当到文件尾时,将返回 nil,但不关闭文件。:使用外部的文件句柄来实现。它以一种面对对象的形式,将所有的文件操作定义为文件句柄的方法。:拥有一个当前输入文件和一个当前输出文件,并且提供针对这些文件相关的操作。:返回一个临时文件句柄,该文件以更新模式打开,程序结束时自动删除。原创 2022-09-03 10:47:53 · 604 阅读 · 0 评论 -
【Lua 入门基础篇(九)】协程(coroutine)
拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。协同程序是一种计算机程序组件,它通过允许暂停和恢复执行,将子程序泛化以实现非抢占式的多任务处理。...原创 2022-09-03 08:00:00 · 1099 阅读 · 0 评论 -
【Lua 入门基础篇(八)】元表
如果要用条件运算符来比较两个对象,这两个对象的元表一定要一致,才能准确调用方法。(b没设置元表是false,设置元表后是true)Lua的表本质其实是个类似HashMap的东西,其元素是很多的Key-Value对,如果尝试访问了一个表中并不存在的元素时,就会。访问table.age时,table中没有age这个成员,但Lua接着发现table有元表meta。: 对指定 table 设置元表(metatable),如果元表(metatable)中存在。,那么可以直接修改table表中,增加了成员age=1。.原创 2022-09-01 08:00:00 · 2361 阅读 · 0 评论 -
【Lua 入门基础篇(七)】表&模块与包
table 是一种数据结构用来帮助我们创建不同的数据类型(数组、字典等)。table 使用关联型数组,可以用任意类型的值来作数组的索引,不可是nil。table 不固定大小。Lua 也是通过table来解决模块(module)、包(package)和对象(Object)的。构造器是创建和初始化表的表达式。最简单的构造函数是{},用来创建一个空表。创建table a并设置元素,将a赋值给b,则a与b都指向同一个内存。如果a设置为nil,则b同样能访问table的元素。如果没有的变量指向这片内存,Lua的垃圾原创 2022-08-30 08:00:00 · 264 阅读 · 0 评论 -
【Lua 入门基础篇(六)】数组&迭代器
很多情况下,迭代器需要保存多个状态信息而不是简单的状态常量和控制变量,最简单的方法是使用。迭代的状态包括被遍历的表(循环过程中不会改变的状态常量)和当前的索引下标(控制变量)。在Lua中我们常常使用函数来描述迭代器,每次调用该函数就返回集合的下一个元素。数组,就是相同数据类型的元素按一定顺序排列的集合,可以是一维数组和多维数组。)的值作为参数被调用,一个无状态的迭代器只利用这两个值可以获取下一个元素。Lua 数组的索引键值可以使用整数表示,数组的大小不是固定的。,它可以遍历集合的每一个元素。原创 2022-08-28 08:00:00 · 324 阅读 · 2 评论 -
【Lua 入门基础篇(五)】字符串
在一个指定的目标字符串 str 中搜索指定的内容 substr,如果找到了一个匹配的子串,就会返回这个子串的起始索引和结束索引,不存在则返回 nil。%x(此处x是非字母非数字字符): 与字符x配对. 主要用来处理表达式中有功能的字符(^$()%.[]*+-?mainString 为要操作的字符串, findString 为被替换的字符,replaceString 要替换的字符,num 替换次数([数个字符类]: 与任何[]中包含的字符类配对。当上述的字符类用大写书写时, 表示与非此字符类的任何字符配对。原创 2022-08-26 08:00:00 · 657 阅读 · 0 评论 -
【Lua 入门基础篇(四)】运算符
# 对 table 获取长度时,根据的是表的最大索引值。b : c, a 为 true 返回 b 否则返回 c。对于不存在nil的table,取值也非常玄乎!Lua 中没实现三目运算的操作。原创 2022-08-24 08:00:00 · 1566 阅读 · 1 评论 -
【Lua 入门基础篇(三)】流程控制&函数&ipairs&pairs
该参数是可选的制定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果你需要设置函数为局部函数需要使用关键字 local。指定函数名称。函数参数,多个参数以逗号隔开,函数也可以不带参数。函数体,函数中需要执行的代码语句块。函数返回值,Lua语言函数可以返回多个值,每个值以逗号隔开。...原创 2022-08-22 08:00:00 · 578 阅读 · 0 评论 -
【Lua 入门基础篇(二)】变量&循环
编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,用于存储变量的值。var 从 exp1 变化到 exp2,每次变化步长为 exp3(默认1)。for的三个表达式在循环开始前一次性求值,以后不再进行求值。变量在使用前,需要在代码中进行声明,即创建该变量。局部变量的作用域为从声明位置开始到所在语句块结束。变量的默认值均为 nil。三种循环都可以相互嵌套。......原创 2022-08-20 08:00:00 · 874 阅读 · 0 评论 -
【Lua 入门基础篇(一)】基本语法&数据类型
userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。原创 2022-08-18 08:00:00 · 695 阅读 · 1 评论