目录

  1. 什么是 Lua 运算符
  2. 为什么要使用运算符
  3. Lua 运算符的类型
  4. 代码示例
  1. 运算符优先级
  2. 工作原理详解
  3. 优点与应用场景
  4. 常见问题与注意事项
  5. 参考资料与出站链接

什么是 Lua 运算符

Lua 运算符是用于对变量和值执行操作的特殊符号。它们包括算术运算符、关系运算符、逻辑运算符等,用于计算、比较或组合表达式。Lua 的运算符设计简洁,支持动态类型操作。


为什么要使用运算符

  • 数据处理:执行数学计算或逻辑判断。
  • 代码简洁:减少复杂表达式的编写。
  • 条件控制:支持流程控制的逻辑表达式。
  • 灵活性:适应多种数据类型。

Lua 运算符的类型

  1. 算术运算符+, -, *, /, %, ^, -(一元取负)。
  2. 关系运算符==, ~=, <, >, <=, >=
  3. 逻辑运算符and, or, not
  4. 其他运算符
  • ..:字符串连接。
  • #:取长度(字符串或表)。

代码示例

算术运算符

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 运算符按以下顺序(从高到低)执行:

  1. ^(幂)
  2. not, #, -(一元取负)
  3. *, /, %
  4. +, -
  5. ..
  6. <, >, <=, >=, ~=, ==
  7. and
  8. or

示例:

print(2 + 3 * 4)      -- 14(先乘后加)
print((2 + 3) * 4)    -- 20(括号提升优先级)
print(2 ^ 3 * 4)      -- 32(幂优先级最高)

工作原理详解

  • 动态类型:运算符根据操作数类型自动调整行为(如 "2" + 3 转为 5)。
  • 短路求值andor 在确定结果时停止计算。
  • 表长度# 返回连续数字索引的长度,非连续表可能不准确。

优点与应用场景

优点

  • 简洁:运算符少而功能强大。
  • 灵活:支持字符串和数字的自动转换。
  • 高效:短路逻辑优化性能。

应用场景

  • 算术:数学计算、游戏逻辑。
  • 关系:条件判断、排序。
  • 逻辑:流程控制、默认值设置。

常见问题与注意事项

  1. 类型转换
  • "abc" + 5 会抛出错误,需用 tonumber()
  1. 逻辑值
  • nilfalse 为假,其他为真(包括 0)。
  1. # 的局限
  • 只对连续索引有效,#t 对稀疏表不可靠。
  1. 连接性能
  • 频繁使用 .. 创建新字符串,建议用 table.concat
  1. 优先级混淆
  • 使用括号明确运算顺序。

参考资料与出站链接

  1. 官方文档
  1. 学习资源
  1. 工具支持

如果您需要更复杂的运算符示例(如表操作或自定义运算),请告诉我,我会进一步扩展!