元素码农
基础
UML建模
数据结构
算法
设计模式
网络
TCP/IP协议
HTTPS安全机制
WebSocket实时通信
数据库
sqlite
postgresql
clickhouse
后端
rust
go
java
php
mysql
redis
mongodb
etcd
nats
zincsearch
前端
浏览器
javascript
typescript
vue3
react
游戏
unity
unreal
C++
C#
Lua
App
android
ios
flutter
react-native
安全
Web安全
测试
软件测试
自动化测试 - Playwright
人工智能
Python
langChain
langGraph
运维
linux
docker
工具
git
svn
🌞
🌙
目录
▶
Lua语言基础
▶
环境搭建
安装Lua解释器
配置开发环境
第一个Lua程序
▶
基本语法
变量与数据类型
运算符与表达式
控制结构
▶
数据结构
表(Table)详解
数组与迭代
字符串处理
▶
Lua高级编程
▶
函数编程
函数定义与调用
闭包与作用域
高阶函数应用
▶
元表与元方法
元表基础
操作符重载
继承与对象系统
▶
协程编程
协程基础
生产者-消费者模式
协程调度实践
▶
Lua应用实践
▶
游戏开发
Lua与游戏引擎集成
AI脚本实现
热更新机制
▶
系统编程
Lua与C交互
扩展库开发
性能优化技巧
▶
实用工具开发
配置文件解析
自动化测试框架
网络编程基础
发布时间:
2025-03-24 12:03
↑
☰
# Lua运算符与表达式 本文将介绍Lua中的运算符和表达式,帮助你理解如何在Lua中进行各种运算操作。 ## 算术运算符 Lua提供了以下算术运算符: | 运算符 | 描述 | 示例 | |--------|------|------| | + | 加法 | a + b | | - | 减法 | a - b | | * | 乘法 | a * b | | / | 除法 | a / b | | % | 取模 | a % b | | ^ | 幂运算 | a ^ b | | - | 负号 | -a | 示例: ```lua local a = 10 local b = 3 print("加法:" .. a + b) -- 输出:13 print("减法:" .. a - b) -- 输出:7 print("乘法:" .. a * b) -- 输出:30 print("除法:" .. a / b) -- 输出:3.3333333333333 print("取模:" .. a % b) -- 输出:1 print("幂运算:" .. a ^ 2) -- 输出:100 print("负号:" .. -a) -- 输出:-10 ``` ## 关系运算符 关系运算符用于比较两个值,返回布尔值(true或false): | 运算符 | 描述 | 示例 | |--------|------|------| | == | 等于 | a == b | | ~= | 不等于 | a ~= b | | > | 大于 | a > b | | < | 小于 | a < b | | >= | 大于等于 | a >= b | | <= | 小于等于 | a <= b | 示例: ```lua local a = 10 local b = 20 print(a == b) -- 输出:false print(a ~= b) -- 输出:true print(a > b) -- 输出:false print(a < b) -- 输出:true print(a >= b) -- 输出:false print(a <= b) -- 输出:true -- 字符串比较 local str1 = "hello" local str2 = "world" print(str1 < str2) -- 输出:true(按字典序比较) ``` ## 逻辑运算符 Lua提供了三个逻辑运算符: | 运算符 | 描述 | 示例 | |--------|------|------| | and | 逻辑与 | a and b | | or | 逻辑或 | a or b | | not | 逻辑非 | not a | 示例: ```lua local a = true local b = false print(a and b) -- 输出:false print(a or b) -- 输出:true print(not a) -- 输出:false -- 短路求值 local x = nil local y = 10 print(x and y) -- 输出:nil(短路求值) print(x or y) -- 输出:10(短路求值) -- 条件表达式 local age = 20 local status = age >= 18 and "成年" or "未成年" print(status) -- 输出:成年 ``` ## 其他运算符 ### 1. 字符串连接运算符(..) ```lua local str1 = "Hello" local str2 = "World" print(str1 .. " " .. str2) -- 输出:Hello World -- 数字会被自动转换为字符串 local num = 42 print("数字是:" .. num) -- 输出:数字是:42 ``` ### 2. 长度运算符(#) ```lua local str = "Hello" print(#str) -- 输出:5(字符串长度) local arr = {10, 20, 30, 40} print(#arr) -- 输出:4(数组长度) ``` ## 运算符优先级 运算符优先级从高到低的顺序: ``` ^ (幂运算) not - # (一元运算符) * / % (乘除) + - (加减) .. (字符串连接) < > <= >= ~= == (关系运算符) and (逻辑与) or (逻辑或) ``` 示例: ```lua local result = 2 + 3 * 4 -- 等价于:2 + (3 * 4) print(result) -- 输出:14 local expr = 5 + 3 .. "2" -- 等价于:(5 + 3) .. "2" print(expr) -- 输出:82 -- 使用括号改变优先级 local calc = (2 + 3) * 4 print(calc) -- 输出:20 ``` ## 表达式 表达式是由值、变量、运算符和函数调用组成的组合。 ### 1. 算术表达式 ```lua local x = 10 local y = 20 local z = 5 -- 复杂算术表达式 local result = (x + y) * z / 2 ^ 2 print(result) -- 输出:37.5 ``` ### 2. 字符串表达式 ```lua local name = "张三" local age = 25 -- 字符串格式化 local info = string.format("%s今年%d岁", name, age) print(info) -- 输出:张三今年25岁 -- 字符串连接表达式 local greeting = "Hello" .. " " .. name .. "!" print(greeting) -- 输出:Hello 张三! ``` ### 3. 逻辑表达式 ```lua local age = 20 local hasID = true -- 复杂逻辑表达式 local canVote = age >= 18 and hasID print(canVote) -- 输出:true -- 三元运算符模拟 local status = age >= 18 and "成年" or "未成年" print(status) -- 输出:成年 ``` ### 4. 表达式嵌套 ```lua local x = 10 local y = 20 local z = 15 -- 嵌套表达式 local result = (x > y and x or y) + (z >= x and z or x) print(result) -- 输出:35 -- 函数调用在表达式中 local min = math.min(x, y, z) local max = math.max(x, y, z) local average = (min + max) / 2 print(average) -- 输出:15 ``` ## 常见问题解答 ### Q1: 为什么Lua中没有++和--运算符? Lua的设计理念是保持语言简洁,所以没有自增和自减运算符。可以使用以下方式代替: ```lua x = x + 1 -- 替代 x++ x = x - 1 -- 替代 x-- ``` ### Q2: 如何处理除法运算的精度问题? ```lua local result = 10 / 3 print(string.format("%.2f", result)) -- 输出:3.33 -- 如果需要整除,可以使用math.floor local quotient = math.floor(10 / 3) print(quotient) -- 输出:3 ``` ### Q3: 字符串连接操作符(..)和加号(+)有什么区别? - `..`用于字符串连接 - `+`用于数字加法 - 不能用`+`连接字符串 ```lua local str1 = "Hello" local str2 = "World" print(str1 .. str2) -- 正确:HelloWorld -- print(str1 + str2) -- 错误:不能对字符串使用'+'运算符 ``` ## 下一步 现在你已经掌握了Lua的运算符和表达式,可以继续学习[控制结构](/article/lua/basic/control-structures)来了解如何控制程序的执行流程。 ## 参考资源 - [Lua 5.4 参考手册](http://www.lua.org/manual/5.4/manual.html#3.4) - [Lua运算符优先级](http://www.lua.org/manual/5.4/manual.html#3.4.8) - [Lua表达式](http://www.lua.org/pil/3.html)