课程入口
Lua循环与迭代器精讲总结
**🔥 课程核心内容回顾**
1. 三大循环结构
循环类型 |
特点 |
适用场景 |
示例 |
for循环 |
步长可控,性能最优 |
已知次数的遍历 |
for i=1,10 do print(i) end |
while循环 |
条件前置,灵活性高 |
动态条件循环 |
while i<10 do i=i+1 end |
repeat循环 |
条件后置,至少执行一次 |
需要先执行后判断的场景 |
repeat print(i) until i>10 |
2. 迭代器核心机制
迭代器类型 |
特点 |
性能对比 |
经典案例 |
无状态迭代器 |
通过函数计算下一个值 |
⚡️ 更快 |
pairs /ipairs |
有状态迭代器 |
通过闭包保存状态 |
🔄 更灵活 |
斐波那契数列生成器 |
**💡 新手学习指南**
1. 循环选择口诀
"次数明确用for,条件动态用while,至少一次repeat"
2. 迭代器快速理解
-- 无状态迭代器(类似快递员按固定路线送货)
for k,v in pairs(t) do print(k,v) end
-- 有状态迭代器(类似有记忆的智能机器人)
local fib = function()
local a,b=0,1
return function() a,b=b,a+b return a end
end
3. 避坑指南
- 循环变量:for循环的
i
是隐式局部变量,外部不可见
- 死循环:while循环务必设置退出条件
- nil处理:
ipairs
遇到nil会终止遍历
**🚀 实战代码案例**
1. 智能斐波那契生成器(闭包应用)
function fibonacci()
local a, b = 0, 1
return function()
a, b = b, a + b
return a
end
end
local fib = fibonacci()
print(fib()) --> 1
print(fib()) --> 1
print(fib()) --> 2
print(fib()) --> 3
2. 安全遍历工具函数
function safe_pairs(t)
local k = nil
return function()
k = next(t, k)
if k ~= nil then
return k, t[k]
end
end
end
for k,v in safe_pairs{"a",nil,"c"} do
print(k,v) --> 1 a, 3 c (自动跳过nil)
end
- 深度原理剖析:从栈内存角度讲解闭包机制
- 工业级实践:演示Redis/OpenResty等真实场景代码
- 性能对比:无状态vs有状态迭代器基准测试
- 独家心法:"变量生命周期"可视化分析法
**📚 课后扩展学习**
- 进阶:尝试实现支持过滤器的迭代器
function filter(t, fn)
-- 你的代码 here
end
- 思考题:为什么Lua的
pairs
不保证顺序?
- 挑战:用闭包实现面向对象的计数器类