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 + 1
	self.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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kotlin零基础入门到进阶实战

教程介绍 Kotlin现在是Google官方认定Android一级开发语言&#xff0c;与Java100%互通&#xff0c;并具备诸多Java尚不支持的新特性&#xff0c;每个Android程序员必备的Kotlin课程&#xff0c;每个Java程序员都需要了解的Kotlin&#xff0c;掌握kotlin可以开发Web前端、Web后…

【机器学习300问】46、什么是ROC曲线?

一、二分类器的常用评估指标有哪些&#xff1f; 二分类器是机器学习领域中最常见的也是应用最广泛的分类器。评价二分类器的指标也很多&#xff0c;下面列出几个我之前重点写文章介绍过的指标。 &#xff08;1&#xff09;准确率&#xff08;Accuracy&#xff09; 定义为分类正…

VSGitHub项目联动(上传和克隆),创建你的第一个仓库,小白配置

目录&#xff1a; 前言一&#xff0c;基本说明1.1名词概念1.2必配条件 二&#xff0c;配置方法2.1本地生成密钥2.2云端代码托管平台SSH配置添加&#xff08;GitHub&#xff09;2.3VS项目配置 三&#xff0c;参考四&#xff0c;一些讨论 前言 &#x1f308;在编写VS代码项目时&a…

详细安装步骤:vue.js 三种方式安装(vue-cli)

Vue.js&#xff08;读音 /vjuː/, 类似于 view&#xff09;是一个构建数据驱动的 web 界面的渐进式框架。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。它不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。 三种 Vue.js 的安装方法&…

Git Commit 提交规范,变更日志、版本发布自动化和 Emoji 提交标准

前言 Git Commit 是开发的日常操作, 一个优秀的 Commit Message 不仅有助于他人 Review, 还可以有效的输出 CHANGELOG, 对项目的管理实际至关重要, 但是实际工作中却常常被大家忽略&#xff0c;希望通过本文&#xff0c;能够帮助大家规范 Git Commit&#xff0c;并且展示相关 …

03_Mybatis

文章目录 入门案例JDBCMybatis MybatisMybatis介绍Mybatis的环境搭建动态代理增删改查示例事务 Mybatis的配置propertiessettingstypeAliasesenvironmentsmappers 输入映射一个参数多个参数按位置传值对象传值使用Map进行传值 #{}和${}的区别输出映射一个参数多个参数单个对象多…

笔记1-Hadoop之HDFS

Hadoop 开源版本的HADOOP和其他框架的对应关系很混乱&#xff0c;要注意。 Hadoop四大模块&#xff1a;Common HDFS MapReduce Yarn Hadoop能对大量的数据进行分布式处理&#xff0c;可以轻松的从一台服务器扩展到千台服务器&#xff0c;并且 每一台服务器都能进行本地计算和…

Flutter开发进阶之瞧瞧BuildOwner

Flutter开发进阶之瞧瞧BuildOwner 上回说到关于Element Tree的构建还缺最后一块拼图&#xff0c;build的重要过程中会调用_element!.markNeedsBuild();&#xff0c;而markNeedsBuild会调用owner!.scheduleBuildFor(this);。 在Flutter框架中&#xff0c;BuildOwner负责管理构建…

【ai技术】(4):在树莓派上,使用qwen0.5b大模型+chatgptweb,搭建本地大模型聊天环境,速度飞快,非常不错!

1&#xff0c;视频地址 https://www.bilibili.com/video/BV1VK421i7CZ/ 2&#xff0c;下载镜像 raspberry-pi-os-64-bit https://blog.csdn.net/freewebsys/article/details/136921703 项目地址&#xff1a; https://www.raspberrypi.com/software/operating-systems/#rasp…

【JAVA重要知识 | 第九篇】ConCurrentHashMap源码分析

文章目录 9.ConCurrentHashMap源码分析9.1 ConCurrentHashMap 1.79.1.1存储结构9.1.2初始化9.1.3put流程&#xff08;1&#xff09;判断是否要put(key,value)流程&#xff08;2&#xff09;put(key,value)&#xff08;3&#xff09;自旋获取hash位置的HashEntry 9.1.4 rehash扩…

【力扣hot100】1. 两数之和 49.字母异位词分组 128. 最长连续序列

目录 1. 两数之和题目描述做题思路参考代码 49.字母异位词分组题目描述做题思路参考代码 128. 最长连续序列题目描述做题思路参考代码 1. 两数之和 题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数…

子网掩码,网段,网关

IP地址、子网掩码、网段、网关【网络常识 2】_哔哩哔哩_bilibili 网关&#xff1a; 什么时候需要用到网关&#xff1a; 若目标IP在同一网段则可以直接通信不需要经过网关&#xff0c;否则需要。 怎么判断对方的ip是否与我在同一网段呢&#xff1f; 判断网络号是否相同。 电…

Android Studio 和 lombok 的版本适配、gradle依赖配置、插件安装及使用

文章目录 Intro注意事项Android Studio 和 lombok 的版本选择及下载下载链接 在 Android Studio 中安装一次 lombok 插件在每个 gradle 项目中添加 lombok 相关依赖(如要用到)使用ref Intro 用惯了 JavaMavenIDEA 开发后端服务&#xff0c;突然有一天用 JavaGradleAndroidStud…

【Flink】窗口实战:TUMBLE、HOP、SESSION

窗口实战&#xff1a;TUMBLE、HOP、SESSION 1.TUMBLE WINDOW1.1 语法1.2 标识函数1.3 模拟用例 2.HOP WINDOW2.1 语法2.2 标识函数2.3 模拟用例 3.SESSION WINDOW3.1 语法3.2 标识函数3.3 模拟用例 4.更多说明 在流式计算中&#xff0c;流通常是无穷无尽的&#xff0c;我们无法…

【PyQt】17.1-日历控件 不同风格的日期和时间、以及高级操作

日历控件puls版本 前言一、日历控件中不同风格的日期和时间1.1 代码1.2 注意事项格式设置m的大小写问题QTime和QDateTime的区别 1.3 运行结果 二、高级操作2.1 成倍调整2.2 下拉出日历2.3 事件函数2.4 获取设置的日期和时间 完整代码 前言 1、不同风格的日期和时间展示 2、高级…

Codeforces Round 930 (Div. 2)(A,B,C,D)

比赛链接 C是个交互&#xff0c;D是个前缀和加二分。D还是很难写的。 A. Shuffle Party 题意&#xff1a; 您将得到一个数组 a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1​,a2​,…,an​ 。最初&#xff0c;每个 1 ≤ i ≤ n 1 \le i \le n 1≤i≤n 对应 a i i a_ii…

深度学习十大算法之长短时记忆网络(LSTM)

一、长短时记忆网络&#xff08;LSTM&#xff09;的基本概念 长短时记忆网络&#xff08;LSTM&#xff09;是一种特殊类型的循环神经网络&#xff08;RNN&#xff09;&#xff0c;主要用于处理和预测序列数据的任务。LSTM由Hochreiter和Schmidhuber于1997年提出&#xff0c;其…

41-Vue-webpack基础

webpack基础 前言什么是webpackwebpack的基本使用指定webpack的entry和output 前言 本篇开始来学习下webpack的使用 什么是webpack webpack: 是前端项目工程化的具体解决方案。 主要功能&#xff1a;它提供了友好的前端模块化开发支持&#xff0c;以及代码压缩混淆、处理浏览…

海康威视-AIOT的业务转型

海康威视的转型和定位为智能物联网&#xff08;AIoT&#xff09;解决方案和大数据服务的提供商。 公司不仅仅聚焦于其核心的视频监控业务&#xff0c;而且正在积极拓展到新的技术领域和市场。通过专注于物联感知、人工智能、大数据等技术的创新&#xff0c;对未来技术发展方向的…

golang import引用项目下其他文件内函数

初始化项目 go mod init [module名字] go mod init project 项目结构 go mod 文件 代码 需要暴露给外界使用的变量/函数名必须大写 在main.go中引入&#xff0c;当前项目模块名/要引用的包名 package mainimport (// 这里的路径开头为项目go.mod中的module"project/…