Lua热更新(Lua)

--  [[]] print

下载Lua For Windows   Sublime Text(仅用于演示,实际项目使用VsCode)       Ctrl+B运行

语法基础

基础类型:nil number string boolean

运算符:and-or-not  ~= ^  if-then-end-elseif-else  while-do-end  repeat-until   for i=1,10 do end

 函数:function  

table: pairs ipairs {["键"]=值,}   {类,可以有函数}  table.insert remove sort  concat

 local require package.loaded[]   _G return

协程:coroutine.creat-wrap    coroutine.resume()-()   coroutine.yield()  coroutine.status-running

元表:setmetatable() __tostring=  __call=  __add等  __index __newIndex

面向对象:封装 继承 多态 base传入self

os.time  os.date("*t") math.cos deg rad max min floor cliet modf

collectgarbage("count")   collectgarbage("collect")

变量

  type可以得到类型,而它本身返回一个string

nil string number boolean

字符串

如果是括号,不用加双引号

即使s2是其他类型也可以拼接,默认拼接成字符串

string提供的公共方法:        注意只是返回一个新字符串,不会改变原字符串对应输出

第二个返回值是,修改了几处

运算符

短路就是前面为false后面就不会执行

三目运算符也不支持

条件分支/循环语句

可以组合

dowhile比较特殊,在c#里面是进入条件,而这里是结束条件。 且关键词也不同

默认递增,且默认增1

递减

函数

lua的语法全部是从上到下调用的。在下面定义的函数不能在上面调用,c#可以,但lua不行

用的是变量则调用变量

参数可以不写类型

参数可以随便传。  返回值也不用指定类型,在外面接收即可。 数量也无限制,类似元组

打出function,按tab可以补全

不支持重载

function默认的三个点其实就是变长参数。 用一个表把他接收起来(类型无限制),然后按长度输出

用一个变量接收再返回也可以,但其实function本身就是一个变量,直接返回也是没问题的

会输出15   充当返回值的函数不要写函数名,它是变量

table

所有复杂类型都是talbe

例如这里#a,会输出2,后面断了

如果中间为空会断掉,可能遍历不完

  

可以这样写,但一般不建议用负数

顺带一提,#aa=3,aa[1] [2] [3] 分别是2,3,5  并没有被分开

加两道题:打印5打印2

空一个不会断,空两个会断掉。 一般不建议你自定义索引

迭代器遍历

中间没有4,断开了,所以5也得不到,这是ipairs

 pairs则全部打印出来了

这种写法可以只遍历键,只写一个变量

字典

 和之前写的键值对类似为i确保万无一失还是用中括号填键访问比较稳妥

置空应该可以认为是删除了。 或者直接删代码(有风险)

paint(k,v,1,2,3)其实打印多少个参数都可以,print会自动空行。

   也可以只得到键,方法同上。但不能只得到值,这种写法本质上还是得到了键与值。

←只不过他没有使用键,只打印值就好了

类和结构体

一切都是模仿

方法类似,点出来调用建议都用冒号申明

而且lua中没有this.age这个东西

申明函数时如果不用点,而用冒号的话,就会多出一个self关键字,必须配合冒号调用

总结:要么指明是谁的,要么传参时传入自己。 冒号调用等于默认传入自己,如果像↑这种我根本没有写参数,那么self就默认是传入的第一个参数。

可以是 Student:Speak2    Student.Speak2(Student)    两种都可以 self必须配合冒号调用

如果搞不清,可以简单一点调用→不是非要用冒号和self

但要搞清楚他俩的区别

插入移除排序拼接

↑这样申明是可以的,表里面可以套表

t2插入t1后面

如果传参则按参数来,不传参则默认移除最后一个

直接调用默认升序true就是a放前面

一般只用于字符串

多脚本执行

我们之前声明的都是全局变量,哪怕是在函数内部申明的,也是全局变量

require(字符串形式)

 注意会从头到尾执行一遍 test文件如这里全局变量testA就可以正常打印,local则不行

可以执行另一个lua文件(这里的test是文件名,必须加引号) 同时允许获取其中的全局变量

其他脚本只能加载一次。想要再次执行,只能卸载过后再次加载     注意是中括号

本地变量例外,不会被存到大G表中。  G表也可以用来存东西

但仍然可以通过返回一个本地变量,来使用本地变量只需要在外部去接收它使用

多变量三目运算符

另外函数可以同时返回多个返回值  非-not

分别输出2,1,nil    可以利用此特性模拟三目运算符

协程

输出这几种方法都可以,注意f1是一个函数

对应wrap

注意调用一次协程只执行一次,lua特性是从上到下只执行一次想要多次执行协程就要多次调用

两种方法都有返回值,第一种会额外返回执行状态(所以可以用两个变量接收),第二种只会返回值

实测,只能得到create的协程的状态

running状态和 coroutine.running() 只能写在协程内部去得,写在外面是得不到“正在运行”的状态的

元表

输出表默认会打印类型和编码,但如果重写了输出子表会调用元表的tostring方法如果填参数,则参数a代表子表自己

参数a代表子表自己

第二个参数开始,才代表你传进去的参数。  一个表本身是不支持像函数一样调用的。必须指定了元表,并设置了__call 才可以像函数一样调用。

+ - *  / % ^  == < <= ..同理,注意没有> 和>+,只有小于指定同一张元表才会得true

也可以在meta.__index={} 申明一个空表        可以寻找元表的元表,但前提给爷表的index也指定好

这个倒是没有index重要这个不会管元表

rawget rawset getmetatable  后面几个用的不多

Lua面向对象

封装就是new一个对象,接收,访问该表是访问它的元表,但增加却是增加的它自己

继承,是父类自己提供的方法,通过该方法创建一个子类,自动指定父类为元表,也可以new

封装

先申明一个空表,然后增加方法,该方法又返回一个空表,只不过又用到了元表的知识得到id

这时候外面myobj就等于里面local obj了,只有建立元表关系,并指定index才能访问其中的id

输出1,2为什么?原因:myobj第一次调用test,把自己作为参数传递,但它其中没有id',所以使用了元表当中的id。但之后又设置了id,就输出自己的

继承

继承用大G表,因为它是全局的。封装不用,因为它是本地的

object表中加了一个方法,传一个字符串可以在大G表中申明一个空表。

注意区分传入时是字符串,调用则只需要名字  类似字典的访问  因为都是键值对

写的很清楚了

如果改变了class1的name,不影响父类的值,相当于子类拥有了自己的值

多态

子类父类都有同一个方法,子类重写了该方法,执行不同的逻辑。 c#中通过base. 可以保留父类方法,lua中则需要一些操作

在上一步继承方法里,给子类定义一个base属性,让它就等于父类

注意冒号调用操作的是父类数据,不要这么写

这三次调用实际上都是在操作GameObject这个大类里的数据,并不是他们自己的

总结:

--多态
--申明一个新的类
Object:subClass("GameObject")
--成员变量
GameObject.posX = 0
GameObject.posY = 0
--成员方法
function GameObject:Move()self.posX = self.posX + 1self.posY = self.posY + 1
end--实例化对象使用
local obj = GameObject:new()
print(obj.posX)
obj:Move()
print(obj.posX)--申明一个新的类 Player 继承 GameObject
GameObject:subClass("Player")
--多态 重写了 GameObject的Move方法
function Player:Move()--base调用父类方法 用.自己传第一个参数self.base.Move(self)
end
print("****")
--实例化Player对象
local p1 = Player:new()
print(p1.posX)
p1:Move()
print(p1.posX)

自带库

os.time得到的是这种 所以我们一般自定规则  注意os.date("*t")得到一张表

遍历输出

也可以点出单个值   ↑

🥧就是180°

30°是弧度,一π等于180°。 面板上显示的是角度,如cos(30°)=cos(30*mathf.deg2rad)

其实用^ 就行了种子变了随机数才会变一般不会改

垃圾回收

尽量是手动触发GC,不要自动GC。 比如过场景时手动去触发GC

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/578785.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot简介及案例

文章目录 Spring Boot简介以下是一个简单的 Spring Boot Web 应用实例**步骤 1&#xff1a;创建 Spring Boot 项目****步骤 2&#xff1a;编写 RESTful 控制器****步骤 3&#xff1a;配置主类****步骤 4&#xff1a;运行并测试应用** Spring Boot简介 Spring Boot 是一个用于简…

nginx界面管理工具之nginxWebUI 搭建与使用

nginx界面管理工具之nginxWebUI 搭建与使用 一、nginxWebUI 1.nginx网页配置工具 官网地址: http://www.nginxwebui.cn 源码地址&#xff1a;https://git.chihiro.org.cn/chihiro/nginxWebUI 2.功能说明 本项目可以使用WebUI配置nginx的各项功能, 包括http协议转发, tcp协议…

Android 12.0 mtp模式下连接pc后显示的文件夹禁止删除copy重命名功能实现

1.前言 在12.0的系统rom定制化开发中,usb连接pc端的时候有好几种模式,在做otg连接pc端的时候,改成mtp模式的时候,在pc端可以看到产品设备 的显示的文件夹的内容,对于产品设备里面的文件在pc端禁止做删除重命名拷贝等操作功能的实现 2.mtp模式下连接pc后显示的文件夹禁止删…

服务器被CC攻击之后怎么办?

1.取消域名绑定取消域名绑定后Web服务器的CPU能够马上恢复正常状态&#xff0c;通过IP进行访问连接一切正常。但是不足之处也很明显&#xff0c;取消或者更改域名对于别人的访问带来了不变&#xff0c;另外&#xff0c;对于针对IP的CC攻击它是无效的&#xff0c;就算更换域名攻…

Xinstall广告效果监测,为您的App推广保驾护航

在当前的移动互联网时代&#xff0c;App已经成为企业与用户连接的重要桥梁。然而&#xff0c;App推广过程中&#xff0c;如何准确衡量广告效果、洞悉推广效果以及优化用户体验&#xff0c;一直是广告主和开发者面临的挑战。这时&#xff0c;一款强大而专业的App全渠道统计服务商…

ZYNQ学习之Ubuntu下Linux文件系统与用户权限

基本都是摘抄正点原子的文章&#xff1a;<领航者 ZYNQ 之嵌入式Linux 开发指南 V3.2.pdf&#xff0c;因初次学习&#xff0c;仅作学习摘录之用&#xff0c;有不懂之处后续会继续更新~ 一、Linux 文件系统 1.1 Linux 文件系统简介以及类型 操作系统的基本功能之一就是文件管…

火狐浏览器垂直标签页对比 Sidebery vs Tab Center Reborn

Sidebery 链接 商店 评价 大而全&#xff0c;各种功能&#xff0c;以及相关的配置项&#xff0c;应有尽有&#xff1b;功能包括但不限于&#xff1a; 树形标签页、着色、面板、容器、快照最近关闭、标签页、历史 默认的配置就已经很好用了&#xff1b; 快捷键&#xff1a;F…

View事件分发

MotionEvent 1.简介 MotionEvent 是Android系统中一个非常重要的类&#xff0c;它代表了屏幕上发生的触摸事件。当用户在屏幕上触摸、滑动或者长按时&#xff0c;都会生成一个MotionEvent对象&#xff0c;这个对象包含了触摸动作的各种信息。 2.事件类型 ACTION_DOWN&#x…

金融案例:构建高效统一的需求登记与管理方案

在金融行业数字化转型背景下&#xff0c;银行等金融机构面临着业务模式创新与数据应用的深度融合。业务上所需要的不再是单纯的数据&#xff0c;而是数据背后映射的业务趋势洞察&#xff0c;只有和业务相结合转化为业务度量指标&#xff0c;经过数据分析处理呈现为报表进行展示…

在遭受攻击时如何有效监测服务器流量峰值——实战指南

引言 在网络安全领域&#xff0c;分布式拒绝服务攻击&#xff08;DDoS&#xff09;是一种常见的针对服务器及网络资源的恶意行为&#xff0c;它通过短时间内发送大量无效请求&#xff0c;导致服务器不堪重负而无法正常服务合法用户。当服务器遭受攻击时&#xff0c;快速识别并…

FANUC机器人故障诊断—报警代码更新(三)

FANUC机器人故障诊断中&#xff0c;有些报警代码&#xff0c;继续更新如下。 一、报警代码&#xff08;SRVO-348&#xff09; SRVO-348DCS MCC关闭报警a&#xff0c;b [原因]向电磁接触器发出了关闭指令&#xff0c;而电磁接触器尚未关闭。 [对策] 1.当急停单元上连接了CRMA…

Windows Podman安装

一、podman 简介 Podman&#xff1a;用于管理 OCI 容器和 Pod 的工具 Podman: A tool for managing OCI pods Podman&#xff08;POD MANager&#xff09; 是一个用于管理容器和映像、挂载到这些容器中的卷以及由容器组组成的 pod 的工具。Podman 在 Linux 上运行容器&#xff…