1 算数运算符
+ - * / ^ -
算数运算符共有6个,它们的操作数,都是实数。
- 一元运算符: - (负号)
- 二元运算符: + - * / ^ (加 减 乘 除 幂)
2 关系运算符
< > <= >= == ~=
关系运算符都是二元运算符,它们的返回结果为true或者false。
进行相等比较时:
- 操作符:== ~= (等于 不等于);
- nil只和自己相等;
- 如果两个操作数的类型不相同,则认为两者不同;
- table,userdata,function 通过引用进行比较,即当且仅当两者表示同一个对象时认为两者相同。
进行大小比较时:
- 操作符:< > <= >= (小于 大于 小于等于 大于等于);
- 如果两个操作数的类型不相同,会报错;
- 数字进行比较,按照传统的数字大小进行判定;
- 字符串进行比较时,按字母的顺序进行判定。
"0" == 0 -- false
2 < 15 -- true
"2" < "15" -- false (alphabetical order!)
2 < "15" -- fault!!!
3 逻辑运算符
and or not
not的返回结果是true或者false
print(not nil) -- true
print(not false) -- true
print(not 0) -- false
print(not not nil) -- false
and和or的运算结果和他的两个操作数有关,不是true或者false
a and b -- 如果a为false,则返回a,否则返回b
a or b -- 如果a为true,则返回a,否则返回b
例如:
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
这样,C语言中的三元运算符
a ? b : c
在Lua中等价于:
(a and b) or c
4 连接运算符
..
用于字符串连接,如果操作数为数字,将被自动转化为字符串
print("Hello " .. "World") -- Hello World
print(0 .. 1) -- 01
5 优先级
从高到低的顺序是:
^
not - (unary)
* /
+ -
..
< > <= >= ~= ==
and
or
除了^和..外,所有的二元运算符都是左连接的。
a + i < b / 2 + 1 <--> (a + i) < ((b / 2) + 1)
5 + x ^ 2 * 8 <--> 5 + ((x ^ 2) * 8)
a < y and y <= z <--> (a < y) and (y <= z)
- x ^ 2 <--> - (x ^ 2)
x ^ y ^ z <--> x ^ (y ^ z)
网友评论