🎬 HoRain云小助手个人主页

 🔥 个人专栏: 《Linux 系列教程》《c语言教程

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

一、算术运算符

1. 基本算术操作

2. 特殊算术扩展

二、关系运算符

1. 基本比较操作

三、逻辑运算符(关键特性)

1. 返回值规则

2. 短路求值特性

3. 常见应用技巧

四、其他关键运算符

1. 字符串连接运算符

2. 长度运算符

五、重要注意事项

1. 运算符优先级

2. 类型转换规则

3. 避坑指南


img

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(字符串与数字类型不同)。
    • tablefunction 按引用比较:两个独立表即使内容相同,== 仍返回 false

三、逻辑运算符(关键特性)

1. 返回值规则

  • and:若第一个操作数为假(falsenil),返回第一个操作数;否则返回第二个操作数
  • or:若第一个操作数为真,返回第一个操作数;否则返回第二个操作数
  • not:返回布尔值(truefalse)。

2. 短路求值特性

  • and:第一个操作数为假时跳过第二个操作数的计算
  • or:第一个操作数为真时跳过第二个操作数的计算
  • 示例
    print(false and error("不会执行"))  -- 输出 false(无错误)
    print(true or error("不会执行"))   -- 输出 true(无错误)
    

3. 常见应用技巧

  • 模拟三目运算符
    condition and true_value or false_value注意true_value 不能为 falsenil)。
  • 设置默认值
    name = userInput or "匿名用户"(若 userInputnilfalse,则用默认值)。

四、其他关键运算符

1. 字符串连接运算符

  • ..(连接)
    将两个字符串或可转为字符串的值拼接(如 10 .. "次" 结果为 "10次")。
    注意:连接大量字符串时,应使用 table.concat 避免性能问题。

2. 长度运算符

  • #(取长度)
    • 对字符串返回字节数(非字符数,多字节字符需额外处理)。
    • 对表(table仅适用于数组部分(连续数字索引从 1 开始),混合表可能返回非预期值。

五、重要注意事项

1. 运算符优先级

  • 从高到低顺序
    ^not / -(一元) → * / / / %+ / -..< / > / <= / >= / == / ~=andor
  • 复杂表达式务必加括号:避免因优先级导致逻辑错误(如 a and b or ca and (b or c) 不同)。

2. 类型转换规则

  • 算术运算:自动将字符串转为数字(失败则报错)。
  • 比较运算不自动转换类型"5" == 5 返回 false
  • 逻辑运算:除 falsenil 外,所有值均视为真(包括 0 和空字符串 "")。

3. 避坑指南

  • 避免用 # 测混合表长度:对非纯数组表(如 {a=1, 2, 3}),# 可能返回 03(行为未定义)。
  • 三目运算符陷阱
    (false) and "true" or "false" 返回 "false",但 (false and "true") or "false" 返回 "false"(因括号改变优先级)。

总结:Lua 的运算符设计强调简洁性与灵活性,但需特别注意逻辑运算符返回操作数本身、短路求值、类型严格比较等特性。实际开发中,优先用括号明确优先级,避免依赖隐式类型转换,并在处理浮点数比较和表长度时保持警惕。对复杂场景(如位运算),建议明确版本依赖或使用标准库封装。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐