算术运算符

下表列出了lua语言中常用算术运算符(设定A的值为10,B的值为20)

操作符 描述 示例
+ 加法 A + B 输出 30
- 减法 A - B 输出 -10
* 乘法 A * B 输出 200
/ 除法 B / A 输出 2
% 取余 B % A 输出 0
^ 乘幂 A ^ 2 输出 100
- 负号 -A 输出 -10

关系运算符

lua中的关系运算符有:

1
2
3
4
5
6
<     
>
<=
>=
==
~=

这些操作符返回结果为false或者true

==和~=比较两个值,如果两个值类型不同,lua认为两者不同;nil只和自己相等。lua通过引用比较tables、userdata、functions。也就是说当且仅当两者表示同一对象时相等。

1
2
3
4
local a,b = 11,"33"
print(a==b)
print(a~=b) -- false
print(a>=b) -- trye

A=10 B=20

操作符 描述 示例
== 等于,检测两个值是否相等,相等返回true,否则返回false (A == B) 为false
~= 等于,检测两个值是否相等,相等返回false,否则返回true (A ~= B) 为true
> 大于,如果左边的值大于右边的值,返回true,否则返回false (A > B) 为false
< 小于,如果左边的值大于右边的值,返回false,否则返回true (A >= B)返回false
>= 大于等于,如果左边的值大于等于右边的值,返回true,否则返回false (A >= B) 返回false
<= 小于等于,如果左边的值小于等于右边的值,返回true,否则返回false (A <= B) 返回true

逻辑运算符

1
2
3
and
or
not

逻辑运算符认为false和nil是假(false),其他是真,0和空字符串也是true

and和or的运算结果不是true和false,而是他的两个操作数相关

a and b – 如果a为false,则返回a,否则返回b

a or b – 如果a为true,则返回a,否则返回b

1
2
3
4
5
print(4 and 5)     -- 5
print(nil and 13) -- nil
print(false and 13) -- false
print(4 or 5) -- 4
print(false or 5) -- 5

A=10 B=20

操作符 描述 示例
and 逻辑与操作符,如果两边的操作都为true,则条件为true (A and B) 为false
or 逻辑或操作符,如果两边的操作任意一个为true,则条件为true (A or B) 为true
not 逻辑非运算符,与逻辑运算结果相反没如果条件为true,逻辑非为false not(A and B)为true

连接运算符

lua中字符串的连接操作符写作两个点(‘..’)

字符串连接,如果操作数为数字,lua将数字转换成字符串

如果前面连接的是数值,靠近数值边的连接符要有空格,若数值实在后面则无要求

1
2
3
local a,b = 11,"33"
print(a..b) -- 1133
print("cc"..1) -- cc1

优先级

从高到低的顺序

1
2
3
4
5
6
7
8
^
not -(unary)
* /
+ -
..
< > <= >= ~= ==
and
or

除了^和..以外所有的二元运算符都是左连接的

1
2
3
4
5
6
7
8
9
10
--一个常见的错误
local a,b = 1,2
if not a>b then
print(a)
else
print(b)
end

=====结果=====
错误

这里的错误是因为not a返回的是false,false和b不是一个类型,所以报错

1
2
3
4
5
6
7
8
9
local a,b = 1,2
if not (a > b) then
print(a)
else
print(b)
end

=====结果=====
1

table构造

lua中表既不是值也不是变量,而是对象。lua表没有固定尺寸,可动态地增加元素

表的创建:创建一张空表:local t = {}

1
2
3
4
5
6
7
8
9
10
11

local t = {"s",2,3,"a"}
for k,v in ipairs(t) do
print(k,v)
end

=====结果=====
1 s
2 2
3 3
4 a

表的索引,下表是从1开始的

1
2
3
4
5
6
7
8
9
10
local t = {"s" , 2 , 3 , x = "a"}
print(t.x)
local x = 3
print(t[x])
print(t["x"])

=====结果=====
a
3
a

取长度操作符

取长度操作符写作一元操作#,字符串的长度是他的字节数

table t的长度被定义成一个整数下表n,它满足t[n]不是nil而t[n+1]为nil,此外,如果t[1]为nil,n就可能是0

1
2
3
4
5
6

local t = {"s",2,3,x = 4,5}
print(#t)

=====结果=====
4