请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册,只需10秒
查看: 67|回复: 1

[插件教程] WatPz - Lua!从入门到入土(三)

[复制链接]
发表于 2020-2-1 15:22:27 | 显示全部楼层 |阅读模式

立即注册!仅需10秒!加入CS2D中文站,成为广大2Der爱好者的一部分!

您需要 登录 才可以下载或查看,没有帐号?立即注册,只需10秒

x
本帖最后由 Fuck 于 2020-2-2 19:28 编辑

- 入门简述 -
数据类型Type
首先我们要知道,在Lua里面有 8 种 数据类型
神马?这么多?别吃惊,跟其他相比,Lua的一个简洁语法,注定了它的数据类型非常好掌握

那么到底是哪八种呢?看下面:
Types.png
通过前面的八行,我们可以得知Lua的八种数据类型分别是:nil, boolean, number, string, userdata, function, thread, table, string
而最后一行则告诉我们,type 这个 thread 通过 string 的形式返回参数的数据类型

懵逼了?没事,学到后面你们就明白了

保留字(reserved word)
何为保留字?顾名思义,不给你用的东西(xD
Lua中,有一些单词是用于特殊用途的,不能作为变量或其他东西使用,这就是保留字

下面是Lua的保留字:
reserved word.png

这些保留字是不能作为标识符使用的,何为标识符?
标识符就是用 “英文字母 + 数字 +_ 组成的字符串(不能以数字开头),例如下面的这些:
Name.png

标识符中,以 “_+ 大写字母” 组成的标识符一般用于特殊用途,比如我们的_VERSION
(所以给标识符起名字的时候,不要按照这种格式哦!)

需要注意的是,Lua是区分大小写的!
虽然 and 是保留字,但是 And AND 就是两个完全不同的标识符了

变量Variable
何为变量?
将标识符(一般都是没有用过的)赋值或者读取,使它起到一个 储存数据 的作用,这种标识符就是变量

不好理解?通俗一点:变量就是可以装东西(数据)的一个标识符
(你可以理解为 标识符=变量,不过这不准确)

在Lua中,变量分为 2 种分别是:全局变量和局部变量
下面我们分别来讲讲这两种的区别

全局变量(Global Variable)
全局变量呢,顾名思义,大家都可以用的变量(共享老婆
Lua默认将变量视为全局变量,因此全局变量的声明很简单:
Global Variable.png
在这里我们看到,任何未初始化的全局变量,值都是 nil

如果这个变量不想要,我们可以通过给变量赋值为 nil ,这样 Lua 会自动回收该全局变量
(相当于这个全局变量从来没有出现过一样(因为不会占内存),不过它还是初始化过)

局部变量(Local Variable)
啥是局部变量?也很好理解,就是私有的东西(非共享老婆
(需要有 local 关键字,不然会默认为全局变量)

局部变量的一个作用域,就是它所身处的程序块及子程序块
不好理解?简单来说,局部变量只能在它目前的这一片区域使用,外面的用不了

举个例子你们就明白了:
Local Variable.png

从图中的例子,我们可以看出:
一开始,初始化了一个局部变量“a”,所以整个代码块,都可以用到这个a变量

但是在 do-end 中,我们初始化了另一个局部变量“a”,这个局部变量被 do-end 框起来了
所以它的一个作用域就只在 do-end 里面,最后一行的 print 不能使用它

因此还是100而不是20

在这里,我们可以看出局部变量的一个特性:“非覆盖优先性”

1. “非覆盖” 啥意思呢?就是说 local 生成的这个局部变量,在赋值的时候
不会把外面的同名变量(不管是局部还是全局)覆盖掉,它们两个不会相互影响

2. “优先”则是因为Lua在读取变量时,会从自身的代码块开始,一级一级往上找
如果找到了这个变量的声明,就会停止搜索(可以理解为,这种搜索遵循 “短路原则”)

所以在图中我们可以看到:

第一个 print 函数,需要使用a这个变量的时候
先在他自己的一个代码块里面找,发现了一个a(20),于是直接用了
没有去找 外面的那个a(100)
(注意!哪怕变量赋值为nil,只要是初始化过,照样也会使用

而第二个 print ,找a这个变量的时候
在整个程序中找,因为 do-end 中的a(20)是局部变量,所以它 没有权限访问
只能找到开头的这个a(100)

那么把开头这个a的 local 去掉,让它变成全局变量,有啥区别?
区别在于,变成全局变量后,别的Lua加载这个Lua的时候,也可以用到a了

(这部分可能有点复杂,不懂的可以反复看看,或者在评论区询问)

注释(Annotation
对于一个程序员,在代码中编写注释是一种不可或缺的好习惯
注释不仅利于你自己回忆思路,而且也方便别人阅读你的代码
比如下面的两种代码,原理一样,习惯不同,可以体验下感受
goodHabit.png

badHabit.png

同样是定义一个阶乘函数,前者有 注释 ,有 缩进 ,有 良好的命名习惯 ,自然很舒服
看一眼就知道在讲什么,而后者屁都没有,你还要理解原理才能明白用途

或许你会说,其实后者也很好理解,但是实际运用中,有很多复杂而且难懂的代码
如果让你一个个理解去..TM是你写还是我写

所以一个良好的习惯十分重要,那么接下来我们讲讲写注释
可能很多细心的读者,已经发现了注释的一个格式 “-- + “你要注释的内容”
但这个仅仅是单行注释,如果要多行注释(虽然很多IDE可以做到)
写一堆“--”无疑很麻烦,也不方便后期的修改

因此Lua设计出了一种多行注释,格式为
--[[ +
“你要注释的内容,可以换行” +
“你要注释的内容,可以换行” +
“你要注释的内容,可以换行” +
]]

为什么是 “[[” 和 “]]” ?后面讲字符串(String)的时候你就明白了

暂时就讲这么多,你们好好消化,下一章我们讲讲这八种数据类型的简单运用
CS2D中文站 - 版权所有 1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者的同意
4、CS2D中文站管理员和版主有权不事先通知发贴者的情况下删除本贴
回复

使用道具 举报

发表于 2020-2-1 17:28:50 | 显示全部楼层
大佬牛逼!!!学习了
回复
回复 支持 反对

使用道具 举报

本版积分规则