Lua的表达式、运算符、字符串连接及优先级详解

openresty 2023-04-30 806次浏览

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

注意:若不确定某些操作符的优先级,就应显式地用括号来指定运算顺序。这样做还可以提高代码的可读性。

Lua表达式、运算符等详解

喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址