HoRain云--Lua运算符全解析

🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
|
专栏名称 |
专栏介绍 |
|
本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。 |
|
|
本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制! |
|
|
全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。 |
|
|
本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。 |
|
|
本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。 |
|
|
本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等) |
目录

Lua 的运算符设计简洁但具有独特语义,主要分为算术、关系、逻辑、字符串连接和长度运算符五类,不支持三目运算符和部分位运算符(需Lua 5.3+或第三方库)。其核心特性是逻辑运算符返回操作数本身而非布尔值、具有短路求值特性,且算术运算会自动进行类型转换。以下是详细分类说明:
一、算术运算符
1. 基本算术操作
+(加)、-(减)、*(乘)、/(浮点除)、%(取模)、^(幂运算)、-(一元负号):- 算术运算自动尝试将字符串转为数字(如
"10" + 5结果为15)。 - 浮点数比较需谨慎:因精度问题,
0.1 + 0.2 == 0.3返回false。
- 算术运算自动尝试将字符串转为数字(如
2. 特殊算术扩展
//(向下取整除法,Lua 5.3+):
除法结果向负无穷方向取整(如5 // 2结果为2,-5 // 2结果为-3)。- 位运算符(Lua 5.3+原生支持):
&(按位与)、|(按位或)、~(按位异或)、<<(左移)、>>(右移)。Lua 5.2及更早版本需依赖第三方库。
二、关系运算符
1. 基本比较操作
==(等于)、~=(不等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于):- 比较时严格区分类型:
"10" == 10返回false(字符串与数字类型不同)。 table和function按引用比较:两个独立表即使内容相同,==仍返回false。
- 比较时严格区分类型:
三、逻辑运算符(关键特性)
1. 返回值规则
and:若第一个操作数为假(false或nil),返回第一个操作数;否则返回第二个操作数。or:若第一个操作数为真,返回第一个操作数;否则返回第二个操作数。not:返回布尔值(true或false)。
2. 短路求值特性
and:第一个操作数为假时跳过第二个操作数的计算。or:第一个操作数为真时跳过第二个操作数的计算。- 示例:
print(false and error("不会执行")) -- 输出 false(无错误) print(true or error("不会执行")) -- 输出 true(无错误)
3. 常见应用技巧
- 模拟三目运算符:
condition and true_value or false_value(注意:true_value不能为false或nil)。 - 设置默认值:
name = userInput or "匿名用户"(若userInput为nil或false,则用默认值)。
四、其他关键运算符
1. 字符串连接运算符
..(连接):
将两个字符串或可转为字符串的值拼接(如10 .. "次"结果为"10次")。
注意:连接大量字符串时,应使用table.concat避免性能问题。
2. 长度运算符
#(取长度):- 对字符串返回字节数(非字符数,多字节字符需额外处理)。
- 对表(
table)仅适用于数组部分(连续数字索引从1开始),混合表可能返回非预期值。
五、重要注意事项
1. 运算符优先级
- 从高到低顺序:
^→not/-(一元) →*///%→+/-→..→</>/<=/>=/==/~=→and→or。 - 复杂表达式务必加括号:避免因优先级导致逻辑错误(如
a and b or c与a and (b or c)不同)。
2. 类型转换规则
- 算术运算:自动将字符串转为数字(失败则报错)。
- 比较运算:不自动转换类型,
"5" == 5返回false。 - 逻辑运算:除
false和nil外,所有值均视为真(包括0和空字符串"")。
3. 避坑指南
- 避免用
#测混合表长度:对非纯数组表(如{a=1, 2, 3}),#可能返回0或3(行为未定义)。 - 三目运算符陷阱:
(false) and "true" or "false"返回"false",但(false and "true") or "false"返回"false"(因括号改变优先级)。
总结:Lua 的运算符设计强调简洁性与灵活性,但需特别注意逻辑运算符返回操作数本身、短路求值、类型严格比较等特性。实际开发中,优先用括号明确优先级,避免依赖隐式类型转换,并在处理浮点数比较和表长度时保持警惕。对复杂场景(如位运算),建议明确版本依赖或使用标准库封装。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)