![](https://img-blog.csdnimg.cn/90884e2d54ba4fb2997383c8da5709de.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Lua
文章平均质量分 82
该栏主要是展示博主日常关于Lua的所学知识以及见解,仅供参考。
ufgnix0802
这个作者很懒,什么都没留下…
展开
-
Lua 开发过程中常见坑
G表是Lua全局表,所有Lua中定义的函数和变量都在其中可以找到,所以通过_G表找到的next为Lua语法中的next。而。原型为:next(table[,index])。参数1是table,参数2为可选填的索引值,若缺省则默认为0。语法为:从参数2(index)的后一位开始遍历参数1(table),直至遇到,返回值有两个:索引,值。如果遍历完整个表都没有 遇到非nil的值,那么返回nil。原创 2023-03-20 21:01:30 · 5834 阅读 · 1 评论 -
Windows下LuaBridge2.8的环境配置及简单应用
下文主要阐述LuaBridge的部署及简易使用...原创 2023-02-09 21:46:14 · 6061 阅读 · 0 评论 -
C++与Lua交互实例 -- 矩阵的加减乘除(版本二)
下面两个方式矩阵的数据都来源于C++端,只是第一种是在C++端进行结果比较展示,第二种方式(userdata)是在lua端进行结果比较展示...原创 2023-02-09 21:39:54 · 1921 阅读 · 0 评论 -
C++与Lua交互实例 -- 矩阵的加减乘除(版本一)
该案例的主要目的是使用矩阵的加减乘除这个功能来练习C++与Lua之间的交互(在这个过程中,CppToLua表示矩阵的数据来源于C++端,然后让Lua使用Lua的矩阵运算逻辑进行计算并返回结果给C++端。C++端使用自己定义的C++矩阵类进行本地矩阵运算,然后与lua端返回的矩阵运算结果进行比对展示。LuaToCpp同理,与CppToLua相反。表示矩阵的数据来源于lua端,然后调用C++端暴露给Lua端的API创建C++矩阵类实例,并进行矩阵运算。原创 2023-02-09 21:34:25 · 1268 阅读 · 1 评论 -
C++类对象与Lua之间的交互
C语言与Lua进行交互,我们可以相对轻易的做到,但在实际应用中我们更加偏向于使用C++与Lua进行交互,面向对象编程。原创 2023-02-02 17:50:24 · 283 阅读 · 0 评论 -
Lua实现矩阵的加减乘除
矩阵的加、减、乘无需多说,主要是矩阵的除法,我使用的是求解矩阵之间的除法。原创 2023-02-01 10:33:32 · 754 阅读 · 0 评论 -
Lua 面向对象(详解)
Lua的面向对象主要是参考云风大神的进行编写,在云风大神源码的基础上考虑了一点细节,构造代码如下...原创 2023-02-01 10:06:28 · 832 阅读 · 0 评论 -
Lua 垃圾回收
Lua 采用了自动内存管理。这意味着你不用操心新创建的对象需要的内存如何分配出来, 也不用考虑在对象不再被使用后怎样释放它们所占用的内存。Lua运行了一个来收集所有(即在Lua中不可能再访问到的对象)来完成自动内存管理的工作。Lua中所有用到的内存,如:字符串、表、用户数据、函数、线程、 内部结构等都服从自动管理。Lua实现了一个增量标记-扫描收集器。它使用这两个数字来控制垃圾收集循环:垃圾收集器间歇率和垃圾收集器步进倍率。这两个数字都使用百分数为单位 (例如:值 100 在内部表示1)。原创 2023-01-29 21:37:52 · 740 阅读 · 0 评论 -
Lua 调试(Debug)
Lua 提供了 debug 库用于提供创建我们自定义调试器的功能。Lua 本身并未有内置的调试器,但很多开发者共享了他们的 Lua 调试器代码。crl输出结果:在以实例中,我们使用到了 debug 库的 traceback 和 getinfo 函数, getinfo 函数用于返回函数信息的表。我们经常需要调试函数的内的局部变量。我们可以使用 setupvalue 函数来设置这些局部变量。输出结果:在以上实例中,计数器在每次调用时都会自增1。原创 2023-01-29 21:36:18 · 1216 阅读 · 0 评论 -
Lua 错误处理
程序运行中错误处理是必要的,在我们进行文件操作,数据转移及web service 调用过程中都会出现不可预期的错误。如果不注重错误信息的处理,就会造成信息泄露,程序无法运行等情况。任何程序语言中,都需要错误处理。原创 2023-01-29 21:30:48 · 455 阅读 · 1 评论 -
Lua 文件I/O
Lua I/O 库用于读取和处理文件。分为简单模式(和C一样)、完全模式。简单模式在做一些简单的文件操作时较为合适。但是在进行一些高级的文件操作的时候,简单模式就显得力不从心。例如同时读取多个文件这样的操作,使用完全模式则较为合适。原创 2023-01-29 21:27:29 · 1072 阅读 · 0 评论 -
Lua 模块与包
模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。 Lua 的模块是由变量、函数等已知元素组成的 table,因此创建一个模块很简单,就是创建一个 table,然后把需要导出的常量、函数放入其中,最后返回这个 table 就行。以下为创建自定义模块 module.lua,文件代码格式如下: 由上可知,模块的结构就是一个 table 的结构,因此可以像操作调用原创 2023-01-29 21:24:41 · 464 阅读 · 0 评论 -
Lua table(表)
Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。Lua table 是不固定大小的,你可以根据自己需要进行扩容。Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。原创 2023-01-29 21:22:53 · 557 阅读 · 0 评论 -
Lua 迭代器
迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。在 Lua 中迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素。原创 2023-01-29 21:20:42 · 785 阅读 · 0 评论 -
Lua 字符串
字符串或串(String)是由数字、字母、下划线组成的一串字符。转义字符用于表示不能直接显示的字符,比如后退键,回车键等。如在字符串转换双引号可以使用 “\”"。原创 2023-01-28 21:48:34 · 951 阅读 · 0 评论 -
Lua 运算符 - 较为特殊部分
在 lua 中,**/** 用作除法运算,计算结果包含小数部分,**//** 用作整除运算,计算结果不包含小数部分...原创 2023-01-28 21:46:53 · 675 阅读 · 0 评论 -
Lua 函数 - 可变参数
调用select时,必须传入一个固定的实参selector(选择开关)和一系列参数。如果selector为数字n,那么select返回参数列表中从索引n开始到结束的所有参数列表,否则只能为字符串。Lua函数可以接收可变数目的参数,和C语言类似,在函数参数列表中使用三点。同时我们可以将可变参数赋值给一个变量。,这样select返回变长参数的总数。表示函数有可变的参数。输出结果与上述一样。原创 2023-01-28 21:41:50 · 2075 阅读 · 0 评论 -
Lua 变量
变量在使用前,需要在代码中进行声明,即创建该变量。变量需要标识类型是因为编译程序执行代码之前需要知道如何给语句变量开辟存储区,用于存储变量的值。Lua变量有三种类型:全局变量、局部变量、表中的域。Lua 中的变量全是全局变量,哪怕是在语句块或是函数里,除非使用显式声明为局部变量。局部变量的作用域为从声明位置开始到所在语句块结束。原创 2023-01-28 21:39:44 · 947 阅读 · 0 评论 -
Lua 协同程序(coroutine)
Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。协同有非常强大的功能,但是用起来也很复杂。原创 2023-01-28 21:38:30 · 508 阅读 · 0 评论 -
Lua导出为外部链接库并使用
压缩包内容如下:紧接着,使用VS2022创建一个Windows桌面向导,将Lua源码压缩包内部src文件的源代码文件拷贝至VS2022创建的项目中,具体步骤如下:将Lua源文件中str文件夹下除Makefile和luac.c文件外所有文件复制进入Project1项目路径下。src文件夹:Project1项目文件:然后进入VS2022中,添加现有项(将所有.h和.c文件都加入)。如下: 打开luaconf.h文件,找到第244行,如下 赋值上述红框中的宏,添加至项目–>属性–>C/C+±->预处理原创 2022-06-17 22:28:08 · 1152 阅读 · 0 评论 -
C语言与Lua的交互(实践三)
在Lua table中我们可以访问对应的key来得到value值,但是却无法对两个table进行操作(比如相加)。 因此Lua提供了元表(Metatable),允许我们改变table的行为,每个行为关联了对应的元方法。 例如,使用元表我们可以定义Lua如何计算两个table的相加操作a+b。 当Lua试图对两个表进行相加时,先检查两者之一是否有一个叫__add的字段,如找到,则调用对应的值。__add等即时字段,其对应的值(往往是一个函数或table)就是“元方法”。 有两个很重要的函数来处理元原创 2022-06-14 22:05:14 · 366 阅读 · 1 评论 -
C语言与Lua的交互(实践二)
在lua.c中的main函数中,删除已有代码,改为如下代码: 其中,main.lua的代码如下(注意需要跟lua.c文件放在同一个文件路径下): 运行结果如下: 在lua.c中的main函数中,删除已有代码,改为如下代码: 其中,main.lua的代码如下(注意需要跟lua.c文件放在同一个文件路径下): 运行结果如下: 运行结果如下: 在lua.c中的main函数中,删除已有代码,改为如下代码: 其中,main.lua的代码如下(注意需要跟lua.c文件放在同一个文件路径原创 2022-06-08 21:50:53 · 389 阅读 · 0 评论 -
Lua调用原理展示(Lua堆栈)
通过该篇文章可以更好理解Lua的运行原理与调用方法。规则:特性:若有4个元素分别入栈,则:索引相关:Lua代码:C++代码(其它代码工作原理是一样的,这里的宿主语言使用C++):运行结果:①-④步骤:①-③步骤:建立栈,然后载入资源;④:这个过程,是为了清空栈底,以便后面的操作时按照顺入入栈且从1号栈位开始的。⑤:这一步开始使用C++去访问Lua虚拟机的堆栈,将“LuaFunc”入栈。⑥:以下为重点C++通知Lua虚拟机(L),函数已压入栈,函数传入0个参数,会返回4个参数,不需要错误信息(0转载 2022-06-08 21:47:42 · 704 阅读 · 0 评论 -
Lua的调用原理(Lua的堆栈)
Lua的栈类似于以下定义,它是在创建lua_State的时候被创建的:TValue stack[max_stack_len]//欲知内情可以查看lstate.c文件中的stack_init函数。 存入栈的数据结构包含数值、字符串、指针、table、闭包等。 Lua和C通信时有这样的约定:所有的Lua中的值由Lua自己来管理,C++中产生的值Lua不知道,类似表达了这样一种意思:“如果你(C/C++)想要什么,你告诉我(Lua),我来产生,然后放到栈上,你只能通过API来操作这个值,我只管我的世界。”原创 2022-06-06 21:09:54 · 1349 阅读 · 0 评论 -
C语言与Lua的交互(实践一)
在lua.c中的main函数中,删除已有代码,改为如下代码: 其中,main.lua的代码如下(注意需要跟lua.c文件放在同一个文件路径下): 运行结果如下: 以下代码仍然是修改lua.c文件中的main函数,如下: 其中,main.lua中的内容修改如下: 运行结果如下(两种方式运行结果相同): 以下代码仍然是修改lua.c文件中的main函数,如下: 其中,main.lua中的内容修改如下:使用C语言设置Lua全局变量 以下代码仍然是修改lua.c文件中的main函数原创 2022-06-05 21:47:27 · 495 阅读 · 0 评论 -
Lua的设计与实现——基础数据类型(字符串)
Lua的设计与实现——基础数据类型(字符串)出自书籍:李创.Lua设计与实现[M].北京.人民邮电出版社.2017:186. 这次介绍Lua内部字符串的实现原理。首先将概述Lua的实现原理,看看其中设计者主要考虑哪些情况,然后带着这些问题结合具体的代码进行分析。概述 C语言并不像C++那样,自带处理字符串类型的库,这导致有非常多的C语言库都自己实现了一个处理字符串的类型和相关的API。一般来说,要表示一个字符串,核心就是以下两个数据。字符串长度。指向存放字符串内存数据的指针。原创 2022-05-16 23:06:35 · 434 阅读 · 0 评论 -
Lua的设计与实现——基础数据类型(Lua中的数据类型)
Lua的设计与实现——基础数据类型(Lua中的数据类型)出自书籍:李创.Lua设计与实现[M].北京.人民邮电出版社.2017:186. 在这一部分中,探讨Lua中的基础数据结构。Lua内部采用一种通用的基础数据结构来表示数据类型。Lua语言及其精简,只有字符串和表两种最基本的数据结构。然而,精简并不代表简陋,在这些基础数据结构的实现中,处处可以看到设计者为了性能和可扩展性(这是Lua从一开始就坚持的目标)所做的努力。 Lua是一门动态类型的脚本语言,这意味着同一个变量可以在不同时刻指向不原创 2022-05-11 20:53:09 · 768 阅读 · 0 评论 -
Lua的设计与实现——前言与概述
前言与概述出自书籍:李创.Lua设计与实现[M].北京.人民邮电出版社.2017:186.前言 假如采用C++这样的编译型语言来开发游戏,那么典型的开发流程大致时这样的:擂起袖子来写了一大段代码,然后编译解决调试编译的错误,中间可能还要处理类似崩溃、段错误、内存泄露等问题。另外,由于重新编译了代码,又需要重启服务器,而重启过程中势必涉及数据的加载。总而言之,采用纯编译型语言开发的情况下,相当一部分时间并没有用在真正的业务逻辑开发中。 项目采用的是C++编写的核心引擎模块,暴露核心接口给Lua原创 2022-05-07 17:38:09 · 823 阅读 · 0 评论 -
Lua数据类型
Lua数据类型 Lua是动态类型语言,变量不要类型定义,只需要为变量赋值。值可以存储在变量中,作为参数传递或结果返回。 Lua中有8个基本类型分别为:nil、boolean、number、string、userdata、function、thread和table。数据类型描述nil这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。boolean包含两个值:false和true。number表示双精度类型的实浮点数stri原创 2022-05-06 09:30:02 · 498 阅读 · 0 评论 -
Lua基础语法
Lua基础语法简介 Lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。 Lua是巴西里约热内卢天主教大学里的一个研究小组于1993年开发的,该小组成员有:Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo。设计目的 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua特性轻量级:它用标准C语原创 2022-05-04 22:31:03 · 253 阅读 · 0 评论 -
Lua环境搭建及简单使用方式
Lua环境搭建及简单使用方式TIPS:以下示例使用Lua-5.3.6版本进行介绍,结合VS2022进行演示。下载安装下载链接:http://www.lua.org/ftp/压缩包内容如下:紧接着,使用VS2022创建一个空项目,将Lua源码压缩包内部src文件的源代码文件拷贝至VS2022创建的空项目中运行即可,具体步骤如下:将Lua源文件中str文件夹下除Makefile文件外所有文件复制进入Project1项目路径下。src文件夹:Project1项目文件:然后原创 2022-05-03 22:49:17 · 2133 阅读 · 1 评论