# 操作符
操作符是用于告诉解释器执行特定的数学或逻辑运算的符号。Lua 语言有丰富的内置操作符,主要包括以下几类:
- 算术运算操作符
- 关系运算操作符
- 逻辑运算操作符
- 其它操作符
这篇教程将会依次介绍以上四类操作符。
## 算术去处操作符
下面的表中列出了所有 Lua 语言支持的算术运算操作符。假设 A 变量的值为 10,B 变量的值为 20,则:
| 操作符 |
描述 |
示例 |
| + |
两个操作数据相加 |
A + B = 30 |
| - |
第一个操作数减去第二个操作数据 |
A - B = 10 |
| * |
两个操作数相乘 |
A * B = 200 |
| % |
模除操作符 |
A % B = 0 |
| ^ |
幂运算符 |
A ^ 2 = 100 |
| - |
一元减操作符用于取反 |
-A = -10 |
## 关系运算符
下面的表列出了 Lua 支持的所有关系运算符。假设 A 的值为 10,B 的值为 20,则:
| 操作符 |
描述 |
示例 |
| == |
判断两个操作数是否相等,若相等则条件为真,否则为假。 |
(A == B) 为假。 |
| ~= |
判断两个操作数是否相等,若不相等则条件为真,否则为假。 |
(A ~= B) 为真。 |
| > |
如果左操作数大于右操作数则条件为真,否则条件为假。 |
(A > B) 为假。 |
| < |
如果左操作数小于右操作数则条件为真,否则条件为假。 |
(A < B) 为真。 |
| >= |
如果左操作数大于或等于右操作数则条件为真,否则条件为假。 |
(A >= B) 为假。 |
| <= |
如果左操作数小于或等于右操作数则条件为真,否则条件为假。 |
(A <= B) 为真。 |
## 逻辑运算符
下面的表列出了 Lua 支持的所有逻辑运算符。假设 A 的值为 真(非零),B 的值为 假(零),则:
| 操作符 |
描述 |
示例 |
| and |
逻辑与运算符。如果两个操作数都非零,则条件为真。 |
(A and B) 为假。 |
| or |
逻辑或运算符。如果两个操作数中其中有一个非零,则条件为真。 |
(A or B) 为真。 |
| not |
逻辑非运算符。翻转操作数的逻辑状态。如果条件是真,则逻辑非运算符会将其变成假。 |
!(A and B) 为真。 |
## 其它操作符
Lua 语言还支持另外两个操作符:
| 操作符 |
描述 |
示例 |
| .. |
连接两个字符串。 |
若 a 为 "Hello",b 为 "World",则 a..b 返回 "Hello World"。 |
| # |
一元运算符,返回字符串或者表的长度。 |
#"Hello" 返回 5。 |
## 操作符优先级
操作符的优先级将决定表达式中的项如何组合。这会影响到表达式的求值。一些操作符比另外一些操作符有更高的优先级。例如,乘法操作符优先级比加法操作符更高。
例如 x = 7 +3\*2,这里 x 的值为 13,而不是 20。这是因为操作符 \* 优级级比操作符 + 优先级更高,所以先得到 3*2 的乘积,然后再加上 7。
下面的表中,从上到下优先级递减。在每个表达式中,高优先级操作数先运算。
| 分类 |
操作数 |
结合性 |
| 一元运算符类 |
not # - |
从右至左 |
| 连接运算符 |
.. |
从右至左 |
| 乘除运算符类 |
* / % |
从左至右 |
| 加减运算符类 |
+ - |
从左至右 |
| 关系运算符类 |
< > <= >= == ~= |
从左至右 |
| 等于运算符类 |
== ~= |
从左至右 |
| 逻辑与运算符 |
and |
从左至右 |
| 逻辑或运算符 |
or |
从左至右 |