- 第一种:lua迭代器的实现依赖于闭包(closure)特性
1.1 第一个简单的写法
--迭代器写法
function self_iter( t )
local i = 0
return function ()
i = i + 1;
return t[i]
end
end
-- 使用
local t = {10, 20, 30}
local iter = self_iter(t) -- 这里就是使用了闭包函数的特性
while true do
local element = iter()
if element == nil then break end
print(element)
end
- 第二种:使用泛型for实现
2.1 语法
for <var-list> in <exp-list> do
<body>
end
2.2 泛型for理解:for做的第一件事就是对in后面的表达式进行求值,返回3个值,分别是迭代器函数(iter),恒定变量(table),控制变量(i),之后就会使用恒定变量和控制变量来调用迭代器函数
2.3 泛型for迭代器实现例子
-- 迭代器
local function self_iter( list, i )
i = i + 1
local v = list[i]
print(v)
if v then
return i, v
end
end
-- for 初始化
function self_ipairs( list )
return self_iter, list, 0
end
-- 使用
local a = {10, 20, 40}
for k, v in self_ipairs(a) do
print(k, ' ', v)
end
- 注:各种复杂的迭代器实现就是对迭代器函数(iter)和恒定变量(table)的各种变形