前言
在上一篇我们说明了如何基于centos7系统快速搭建lua,本篇将接着说明lua常用的数据类型以及基础语法
关键字
下列是Lua的关键字,大家在定义常量、变量或其他用户自定义标识符都要避免使用以下这些关键字:

一般约定,以下划线开头连接一串大写字母的名字(比如 _VERSION) 被保留用于 Lua 内部全局变量。这个也是上面我们不建议这么定义标识 符的原因。
运算符
Lua中支持的运算符有算术运算符、关系运算符、逻辑运算符、其他运算符
算术运算符:
+ 加法- 减法* 乘法/ 除法% 取余^ 乘幂- 负号
例如:
10+20 --> 3020-10 --> 1010*20 --> 20020/10 --> 23%2 --> 110^2 --> 100-10 --> -10

关系运算符
== 等于~= 不等于> 大于< 小于>= 大于等于<= 小于等于
例如
10==10 -->true10~=10 -->false20>10 -->true20<10 -->false20>=10 -->true20<=10 -->false
逻辑运算符
and 逻辑与 A and B &&or 逻辑或 A or B ||not 逻辑非 取反,如果为true,则返回false !
逻辑运算符可以作为if的判断条件,返回的结果如下:
A = trueB = trueA and B -->trueA or B -->truenot A -->falseA = true

其他运算符
.. 连接两个字符串# 一元预算法,返回字符串或表的长度
例如:
"HELLO ".."WORLD" -->HELLO WORLD#"HELLO" -->5
全局变量&局部变量
在Lua语言中,全局变量无须声明即可使用。在默认情况下,变量总是认为是全局的,如果未提前赋值,默认为nil:

要想声明一个局部变量,需要使用local来声明
Lua数据类型
Lua有8个数据类型
nil(空,无效值)boolean(布尔,true/false)number(数值)string(字符串)function(函数)table(表)thread(线程)userdata(用户数据)
可以使用type函数测试给定变量或者的类型:
print(type(nil)) -->nilprint(type(true)) --> booleanprint(type(1.1*1.1)) --> numberprint(type("Hello world")) --> stringprint(type(io.stdin)) -->userdataprint(type(print)) --> functionprint(type(type)) -->functionprint(type{}) -->tableprint(type(type(X))) --> string

nil
nil是一种只有一个nil值的类型,它的作用可以用来与其他所有值进行区分,也可以当想要移除一个变量时,只需要将该变量名赋值为nil,垃圾回收就会会释放该变量所占用的内存
boolean
boolean类型具有两个值,true和false。boolean类型一般被用来做条件判断的真与假。在Lua语言中,只会将false和nil视为假,其他的都视为真,特别是在条件检测中0和空字符串都会认为是真,这个和我们熟悉的大多数语言不太一样
number
在Lua5.3版本开始,Lua语言为数值格式提供了两种选择:integer(整型)和flfloat(双精度浮点型)[和其他语言不太一样,flfloat不代表单精度类型]。
数值常量的表示方式:
>4 -->4>0.4 -->0.4>4.75e-3 -->0.00475>4.75e3 -->4750
不管是整型还是双精度浮点型,使用type()函数来取其类型,都会返回的是number
>type(3) -->number>type(3.3) -->number
所以它们之间是可以相互转换的,同时,具有相同算术值的整型值和浮点型值在Lua语言中是相等
的
string
Lua语言中的字符串即可以表示单个字符,也可以表示一整本书籍。在Lua语言中,操作100K或者1M个字母组成的字符串的程序很常见
可以使用单引号或双引号来声明字符串
>a = "hello">b = 'world'>print(a) -->hello>print(b) -->world
如果声明的字符串比较长或者有多行,则可以使用如下方式进行声明
html = [[<html><head><title>Lua-string</title></head><body><a href="http://www.lua.org">Lua</a></body></html>]]
table
table是Lua语言中最主要和强大的数据结构。使用表, Lua 语言可以以一种简单、统一且高效的方式表示数组、集合、记录和其他很多数据结构。 Lua语言中的表本质上是一种辅助数组。这种数组比Java中的数组更加灵活,可以使用数值做索引,也可以使用字符串或其他任意类型的值作索引(除nil外)。
创建表的最简单方式:
a = {}
创建数组:
我们都知道数组就是相同数据类型的元素按照一定顺序排列的集合,那么使用table如何创建一个数组呢?
>arr = {"TOM","JERRY","ROSE"}
要想获取数组中的值,我们可以通过如下内容来获取:
print(arr[0]) nilprint(arr[1]) TOMprint(arr[2]) JERRYprint(arr[3]) ROSE

从上面的结果可以看出来,数组的下标默认是从1开始的。所以上述创建数组,也可以通过如下方式来创建
>arr = {}>arr[1] = "TOM">arr[2] = "JERRY">arr[3] = "ROSE"
上面我们说过了,表的索引即可以是数字,也可以是字符串等其他的内容,所以我们也可以将索引更改为字符串来创建
>arr = {}>arr["X"] = 10>arr["Y"] = 20>arr["Z"] = 30

当然,如果想要获取这些数组中的值,可以使用下面的方式
方式一>print(arr["X"])>print(arr["Y"])>print(arr["Z"])方式二>print(arr.X)>print(arr.Y)>print(arr.Z)
当前table的灵活不进于此,还有更灵活的声明方式
>arr = {"TOM",X=10,"JERRY",Y=20,"ROSE",Z=30}
如何获取上面的值?
TOM : arr[1]10 : arr["X"] | arr.XJERRY: arr[2]20 : arr["Y"] | arr.YROESE?
function
在 Lua语言中,函数( Function )是对语句和表达式进行抽象的主要方式。
定义函数的语法为:
function functionName(params)end
函数被调用的时候,传入的参数个数与定义函数时使用的参数个数不一致的时候,Lua 语言会通过 抛弃多余参数和将不足的参数设为 nil 的方式来调整参数的个数;

可变长参数函数
function add(...)a,b,c=...print(a)print(b)print(c)endadd(1,2,3) --> 1 2 3
函数返回值可以有多个,这点和Java不太一样
function f(a,b)return a,bendx,y=f(11,22) --> x=11,y=22
thread
thread翻译过来是线程的意思,在Lua中,thread用来表示执行的独立线路,用来执行协同程序
userdata
userdata是一种用户自定义数据,用于表示一种由应用程序或C/C++语 言库所创建的类型

本文介绍了Lua语言的关键字、运算符,包括算术、关系、逻辑运算,以及数据类型如nil、boolean、number、string等的详细解释。此外,还讲解了全局变量、局部变量的使用和Lua的8种核心数据类型,如table的强大功能。


被折叠的 条评论
为什么被折叠?



