跳到主要内容

Lua 运算符

运算符用于把值组合成表达式。你已经见过 +..== 这类符号,这一节我们把常用运算符集中梳理一遍。

算术运算符

Lua 常见算术运算符如下:

运算符说明示例
+加法a + b
-减法或取负a - b-a
*乘法a * b
/浮点除法a / b
//向下取整除法a // b
%取模a % b
^乘方a ^ b

示例:

main.lua
local a = 10
local b = 3

print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a // b)
print(a % b)
print(a ^ b)

输出:

13
7
30
3.3333333333333
3
1
1000.0

字符串拼接

Lua 使用 .. 拼接字符串:

main.lua
local name = "Lua"
print("Hello, " .. name)

输出:

Hello, Lua

不要使用 + 拼接字符串:

-- 错误写法
print("Hello, " + "Lua")

长度运算符

# 用来获取字符串长度或序列长度:

main.lua
local text = "Lua"
local values = {10, 20, 30}

print(#text)
print(#values)

输出:

3
3
注意

# 作用在 table 上时,适合连续数组。如果数组中间有 nil,结果可能不符合你的直觉。

关系运算符

关系运算符返回布尔值:

运算符说明
==等于
~=不等于
<小于
>大于
<=小于等于
>=大于等于

示例:

main.lua
print(10 == 10)
print(10 ~= 20)
print(3 < 5)
print("abc" < "bcd")

输出:

true
true
true
true

字符串可以比较大小,通常按字典序比较。实际业务中如果涉及中文排序、locale 或大小写规则,建议使用专门库处理。

逻辑运算符

Lua 有三个逻辑运算符:

运算符说明
and
or
not

示例:

main.lua
local age = 20
local has_ticket = true

if age >= 18 and has_ticket then
print("welcome")
end

输出:

welcome

andor 不一定返回布尔值,它们会返回参与运算的原始值:

main.lua
print("Lua" and 123)
print(nil or "default")
print(false or 0)

输出:

123
default
0

这个特性常用于设置默认值:

local name = input_name or "anonymous"

位运算符

Lua 5.3+ 支持位运算:

运算符说明
&按位与
``
~按位异或或按位取反
<<左移
>>右移

示例:

main.lua
print(0x0f & 0xf0)
print(0x0f | 0xf0)
print(1 << 4)

输出:

0
255
16

位运算在嵌入式、协议解析、寄存器配置和二进制数据处理中很常见。

运算符优先级

常见优先级从高到低大致如下:

优先级运算符
^
一元运算符:not#-~
*///%
+-
..
<<>>
&
~
`
<><=>=~===
and
or

不确定时,直接加括号:

local result = (a + b) * c

括号能让代码更清楚,也能减少优先级错误。

小结

你需要重点掌握:

  • 数值计算使用 + - * / // % ^
  • 字符串拼接使用 ..
  • 长度运算符是 #
  • 不等于写作 ~=, 不是 !=
  • andor 会返回原始值,可用于默认值表达式。