Lua是动态类型语言。定义变量时不需要指定类型,可以根据变量的值来区分变量类型。

Lua一种8中基础类型,分别是NilBooleanNumberStringUserdataFunctionThreadTable

函数type可以根据变量值来获取变量的类型。

$ lua
Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
> type(nil)
nil
> type(true)
boolean
> type(false)
boolean
> type(10.4)
number
> type(10.4*3)
number
> type(io.stdin)
userdata
> type(print)
function
> type(type)
function
> type({})
table
> type(type(X))
string
> os.exit()

Nil

Nil类型只有一个值nilnil的基本属性是不同于任何值。Lua以nil来表示一种非值,类似于C语言中的NULL。

全局变量默认值为nil,不分配内存。可以通过给全局变量赋值nil用以删除它。

Boolean

Boolean类型有两个值,truefalse,表示传统类型的布尔值。

Lua中并不是只有Boolean类型才可以作为判断条件,而是任何值都可以作为一种条件。

条件判断中将Boolean值false和Nil值nil视为假,其余值都视为真。Lua在条件判断中将0和空字符串也是为真。

Lua支持的逻辑运算符:andor以及not。所有逻辑运算符都将falsenil是为假,其余视为真。

and:如果第一个操作数为假,其结果为第一个操作数;否则结果为第二个操作数。 or:如果第一个操作数为真,其结果为第一个操作数;否则结果为第二个操作数。

示例如下:

$ lua
Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
> 4 and 5
5
> nil and 13
nil
> false and 13
false
> 0 or 5
0
> false or "hi"
hi
> nil or false
false
> not nil
true
> not false
true
> not true
false
> not 0
false
> not 1
false
> not not 0
true
> not not false
false
> os.exit()

Lua在非必要的情况下不会计算第二个表达式的值。 这样i !=0 and a/i > b不会出错。

Number

数字表示

数字常量由可选的十进制部分和可选的十进制指数组成。

带有小数点或指数的为浮点数,其余为整数。整数和浮点数都为number类型。

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
> 4
4
> 0.4
0.4
> 4.57e-3
0.00457
> 0.3e12
300000000000.0
> 5E+20
5e+20
> type(3)
number
> type(3.0)
number
> type(3e10)
number
> os.exit()

整数和浮点数是可以相互转化的,并且根据值判断是否相等。

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
> 3==3.0
true
> -3==-3.0
true
> 0.2e3==200
true
> os.exit()

当需要区分浮点数和整数类型时可以使用math.type

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
> math.type(3)
integer
> math.type(3.0)
float
> os.exit()

不同于其他语言,Lua也支持十六进制浮点数,十六进制浮点数由一个分数部分和一个二进制指数(pp2)组成。

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
> 0xff
255
> 0x1A3
419
> 0x0.2
0.125
> 0xa.bp2
42.75
> 0x1p2
4.0
> 0x0.1
0.0625
> os.exit()

运算符

数学库

随机数

四舍五入

限制

数字转换

优先级

Strings

Tables

Functions