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.mzph.cn/news/766319.shtml

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

相关文章

数据仓库——雪花模式以及层次递归

层次结构 钻取 向下钻取&#xff1a;对某些代表事实的报表中添加维度细节 向上钻取&#xff1a;从某些代表事实的报表中去除维度细节 属性层次 提供了一种自然方法&#xff0c;用于顺序地在不断深入的层次上组织事实。许多维度可以被理解为包含连续主从关系的属性层次。此类…

Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁

Java深度面试题&#xff1a;设计模式、内存管理与并发编程的综合考察 随着Java技术的不断发展&#xff0c;对Java开发者的技术要求也在不断提高。设计模式、内存管理、多线程工具类以及并发工具包和框架等都是Java开发者必须掌握的核心知识点。本文将通过三道综合性的面试题&a…

只有IP地址怎么实现HTTPS访问?

只有IP地址也可以实现HTTPS访问。虽然大部分SSL证书通常是针对域名发放&#xff0c;但也存在专门针对IP地址发放的SSL证书&#xff0c;这类证书允许服务器通过HTTPS协议为其公网IP地址提供安全的Web服务。当服务器配置了基于IP地址的SSL证书后&#xff0c;用户可以通过“https:…

第十届蓝桥杯大赛个人赛省赛(软件类)真题- CC++ 研究生组-字串数字

3725573269 #include<iostream> #include<map> #include<string> using namespace std; int main(){map<char, int> mp;string s "LANQIAO";long long ans 0, power 1;//7位数的26进制可能会超过int范围for(int i 1; i < 26; i){mp.…

深度学习(过拟合 欠拟合)

过拟合&#xff1a; 深度学习模型由于其复杂性&#xff0c;往往容易出现过拟合的问题。以下是一些深度学习中常见的过拟合原因和解决方法&#xff1a; 1. 数据量不足&#xff1a;深度学习模型通常需要大量的数据来进行训练&#xff0c;如果数据量不足&#xff0c;模型容易过度…

富格林:可信操作实现安全做单

富格林认为&#xff0c;现货黄金最近又又创历史新高了&#xff0c;不少投资者都嗅到其好处跃跃欲试想进场操作一番。但事实上&#xff0c;若希望实现安全做单&#xff0c;还是得要熟练掌握可信的黄金操作技巧。富格林为让大家顺利实现安全交易&#xff0c;特地总结了以下可信操…

vue3怎么使用reactive赋值

使用ref赋值&#xff1a; const list ref([]) const getList async () > {const res await axios.get(/list)list.value res.data } 如何使用reactive来替换呢&#xff1f; //const list ref([]) const list reactive([]) const getList async () > {const res…

NLP 笔记:LDA(训练篇)

1 前言&#xff1a;吉布斯采样 吉布斯采样的基本思想是&#xff0c;通过迭代的方式&#xff0c;逐个维度地更新所有变量的状态 1.1 举例 收拾东西 假设我们现在有一个很乱的屋子&#xff0c;我们不知道东西应该放在哪里&#xff08;绝对位置&#xff09;&#xff0c;但知道哪…

iOS模拟器 Unable to boot the Simulator —— Ficow笔记

本文首发于 Ficow Shen’s Blog&#xff0c;原文地址&#xff1a; iOS模拟器 Unable to boot the Simulator —— Ficow笔记。 内容概览 前言终结模拟器进程命令行改权限清除模拟器缓存总结 前言 iOS模拟器和Xcode一样不靠谱&#xff0c;问题也不少。&#x1f602; 那就有病治…

【Golang星辰图】实现弹性微服务架构:使用go-micro和go-kit构建可扩展的网络应用

构建高效网络应用&#xff1a;探索分布式系统和微服务的利器 前言 在当今的互联网时代&#xff0c;构建可扩展且可靠的网络应用变得越来越重要。分布式系统和微服务架构成为了解决大规模应用程序开发和管理的有效方法。本文将介绍一些用于构建分布式系统和微服务的关键工具和…

鸿蒙Harmony应用开发—ArkTS-ForEach:循环渲染

ForEach基于数组类型数据执行循环渲染。 说明&#xff1a; 从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使用。 接口描述 ForEach(arr: Array,itemGenerator: (item: Array, index?: number) > void,keyGenerator?: (item: Array, index?: number): string …

C#面:简述 .NET Framework 类库中的“命名空间”

在 C# 中&#xff0c;命名空间&#xff08;Namespace&#xff09;是一种用于组织和管理代码的机制。它提供了一种将相关的类、接口、结构体和其他类型组织在一起的方式&#xff0c;以便更好地管理和维护代码。 .NET Framework类库中的命名空间是一种逻辑上的分组&#xff0c;它…

【wails】(10):研究go-llama.cpp项目,但是发现不支持最新的qwen大模型,可以运行llama-2-7b-chat

1&#xff0c;视频演示地址 2&#xff0c;项目地址go-llama.cpp 下载并进行编译&#xff1a; git clone --recurse-submodules https://github.com/go-skynet/go-llama.cpp cd go-llama.cpp make libbinding.a项目中还打了个补丁&#xff1a; 给 编译成功&#xff0c;虽然有…

深度学习 线性神经网络(线性回归 从零开始实现)

介绍&#xff1a; 在线性神经网络中&#xff0c;线性回归是一种常见的任务&#xff0c;用于预测一个连续的数值输出。其目标是根据输入特征来拟合一个线性函数&#xff0c;使得预测值与真实值之间的误差最小化。 线性回归的数学表达式为&#xff1a; y w1x1 w2x2 ... wnxn …

creator-webview与Android交互

title: creator-webview与Android交互 categories: Cocos2dx tags: [cocos2dx, creator, webview, 交互] date: 2024-03-23 13:17:20 comments: false mathjax: true toc: true creator-webview与Android交互 前篇 Android&#xff1a;你要的WebView与 JS 交互方式 都在这里了…

【隐私计算实训营——004上手隐语SecretFlow和SecretNote安装部署】

1. SecretFlow安装 1.1 环境要求 Python>3.8操作系统 Ubuntu18 资源&#xff1a;>8核16GB安装包 secretflow-lite 安装方式 docker&#xff08;推荐&#xff09; 2. SecretFlow部署模式 SecretFlow使用Ray作为分布式计算调度框架。 Ray集群由一个主节点和零或若干个…

opencv常用数据结构和函数?

OpenCV是一个强大的计算机视觉库&#xff0c;它提供了丰富的数据结构和函数&#xff0c;用于处理图像和视频数据。以下是一些OpenCV中常用的数据结构和函数&#xff1a; 常用数据结构&#xff1a; cv::Mat&#xff1a;这是OpenCV中最基本和最常用的数据结构&#xff0c;用于存…

Fabric Measurement

Fabric Measurement 布料测量

Redis 教程系列之Redis 性能测试(七)

Redis 性能测试 Redis 性能测试是通过同时执行多个命令实现的。 语法 redis 性能测试的基本命令如下&#xff1a; redis-benchmark [option] [option value] 注意&#xff1a;该命令是在 redis 的目录下执行的&#xff0c;而不是 redis 客户端的内部指令。 实例 以下实例…

分布式组件 Nacos

1.在之前的文章写过的就不用重复写。 写一些没有写过的新东西 2.细节 2.1命名空间 &#xff1a; 配置隔离 默认&#xff1a; public &#xff08;默认命名空间&#xff09;:默认新增所有的配置都在public空间下 2.1.1 开发 、测试 、生产&#xff1a;有不同的配置文件 比如…