目录
什么是 Lua 运算符
Lua 运算符是用于对变量和值执行操作的特殊符号。它们包括算术运算符、关系运算符、逻辑运算符等,用于计算、比较或组合表达式。Lua 的运算符设计简洁,支持动态类型操作。
为什么要使用运算符
- 数据处理:执行数学计算或逻辑判断。
- 代码简洁:减少复杂表达式的编写。
- 条件控制:支持流程控制的逻辑表达式。
- 灵活性:适应多种数据类型。
Lua 运算符的类型
- 算术运算符:
+
,-
,*
,/
,%
,^
,-
(一元取负)。 - 关系运算符:
==
,~=
,<
,>
,<=
,>=
。 - 逻辑运算符:
and
,or
,not
。 - 其他运算符:
..
:字符串连接。#
:取长度(字符串或表)。
代码示例
算术运算符
local a, b = 10, 3
print("加: " .. (a + b)) -- 13
print("减: " .. (a - b)) -- 7
print("乘: " .. (a * b)) -- 30
print("除: " .. (a / b)) -- 3.333...
print("取余: " .. (a % b)) -- 1
print("幂: " .. (a ^ b)) -- 1000
print("取负: " .. (-a)) -- -10
运行结果:
加: 13
减: 7
乘: 30
除: 3.3333333333333
取余: 1
幂: 1000
取负: -10
关系运算符
local x, y = 5, 8
print("等于: " .. tostring(x == y)) -- false
print("不等于: " .. tostring(x ~= y)) -- true
print("小于: " .. tostring(x < y)) -- true
print("大于等于: " .. tostring(x >= y)) -- false
运行结果:
等于: false
不等于: true
小于: true
大于等于: false
逻辑运算符
local p, q = true, false
print("与: " .. tostring(p and q)) -- false
print("或: " .. tostring(p or q)) -- true
print("非: " .. tostring(not p)) -- false
-- 短路求值
local r = nil
print("r or 42: " .. (r or 42)) -- 42
运行结果:
与: false
或: true
非: false
r or 42: 42
其他运算符
-- 字符串连接
local str1, str2 = "Hello", "Lua"
print(str1 .. " " .. str2) -- "Hello Lua"
-- 取长度
local text = "abcde"
local tab = {1, 2, 3}
print("#text: " .. #text) -- 5
print("#tab: " .. #tab) -- 3
运行结果:
Hello Lua
#text: 5
#tab: 3
运算符优先级
Lua 运算符按以下顺序(从高到低)执行:
^
(幂)not
,#
,-
(一元取负)*
,/
,%
+
,-
..
<
,>
,<=
,>=
,~=
,==
and
or
示例:
print(2 + 3 * 4) -- 14(先乘后加)
print((2 + 3) * 4) -- 20(括号提升优先级)
print(2 ^ 3 * 4) -- 32(幂优先级最高)
工作原理详解
- 动态类型:运算符根据操作数类型自动调整行为(如
"2" + 3
转为 5)。 - 短路求值:
and
和or
在确定结果时停止计算。 - 表长度:
#
返回连续数字索引的长度,非连续表可能不准确。
优点与应用场景
优点
- 简洁:运算符少而功能强大。
- 灵活:支持字符串和数字的自动转换。
- 高效:短路逻辑优化性能。
应用场景
- 算术:数学计算、游戏逻辑。
- 关系:条件判断、排序。
- 逻辑:流程控制、默认值设置。
常见问题与注意事项
- 类型转换:
"abc" + 5
会抛出错误,需用tonumber()
。
- 逻辑值:
nil
和false
为假,其他为真(包括 0)。
- # 的局限:
- 只对连续索引有效,
#t
对稀疏表不可靠。
- 连接性能:
- 频繁使用
..
创建新字符串,建议用table.concat
。
- 优先级混淆:
- 使用括号明确运算顺序。
参考资料与出站链接
- 官方文档:
- 学习资源:
- 菜鸟教程 – Lua 运算符(中文)
- Lua Users – Operators(英文)
- 工具支持:
- ZeroBrane Studio:调试运算。
如果您需要更复杂的运算符示例(如表操作或自定义运算),请告诉我,我会进一步扩展!
发表回复