Lua的表达式、运算符、字符串连接及优先级详解
Lua的表达式及运算符跟其他语言类似,主要包含算数运算符、逻辑运算符及关系类运算符
一、算数运算符
算数运算符 | 说明 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法 |
^ | 指数 |
% | 取模 |
print(1 + 2) -->打印 3
print(5 / 10) -->打印 0.5。 这是 Lua 不同于 C 语言的地方
print(5.0 / 10) -->打印 0.5。 浮点数相除的结果是浮点数
-- print(10 / 0) -->注意除数不能为0,计算的结果会出错
print(2 ^ 10) -->打印 1024。 求 2 的 10 次方
local num = 1357
print(num % 2) -->打印 1
print((num % 2) == 1) -->打印 true。 判断 num 是否为奇数
print((num % 5) == 0) -->打印 false。判断 num 是否能被 5 整数
二、逻辑运算符
逻辑运算符 | 说明 |
---|---|
and | 逻辑与 |
or | 逻辑或 |
not | 逻辑非 |
Lua 中的 and 和 or 是不同于 C 语言的。在 C 语言中,and 和 or 只得到两个值 1 和 0,其中 1 表示真,0 表示假。而 Lua 中 and 的执行过程是这样的:
-- a and b:
-- 若 a 为 nil 或 false,b 为任意的真值,则返回 a (即 nil 或 false),与出现顺序无关;
-- 若 a 为 nil,b 为 false,则哪个 先出现 就返回哪个(短路求值);
-- 若 a,b 均为真值,则返回 后出现 的那个值。
-- a or b:
-- 若 a 为 nil 或 false,b 为任意的真值,则返回 b (即真值),与出现顺序无关;
-- 若 a 为 nil,b 为 false,则返回 后出现 的那个;
-- 若 a,b 均为真值,则返回 先出现 的那个值(短路求值)。
三、关系运算符
逻辑运算符 | 说明 |
---|---|
> | 大于 |
< | 小于 |
== | 等于 |
~= | 不等于 |
>= | 大于等于 |
<= | 小于等于 |
注意:Lua 语言中“不等于”运算符的写法为:~=
local a = { x = 1, y = 0}
local b = { x = 1, y = 0}
if a == b then
print("a==b")
else
print("a~=b")
end
---output:
a~=b
四、字符串连接
在 Lua 中连接两个字符串,可以使用操作符“..”(两个点)。如果其中任意一个操作数是数字的话,Lua 会将这个数字转换成字符串。注意,连接操作符只会创建一个新字符串,而不会改变原操作数。也可以使用 string 库函数 string.format 连接字符串。
print("Hello " .. "World") -->打印 Hello World
print(0 .. 1) -->打印 01
str1 = string.format("%s-%s","hello","world")
print(str1) -->打印 hello-world
str2 = string.format("%d-%s-%.2f",123,"world",1.21)
print(str2) -->打印 123-world-1.21
五、优先级
Lua 操作符的优先级如下表所示(从高到低):
操作符 | 优先级 |
---|---|
^ | 高 |
not # - | ↓ |
* / % | ↓ |
+ - | ↓ |
.. | ↓ |
< > <= >= == ~= | ↓ |
and | ↓ |
or | ↓ |