PDF版 ePub版

# 迭代器

## 通用迭代器

array = {"Lua", "Tutorial"}

for key,value in ipairs(array)
do
print(key, value)
end

1  Lua
2  Tutorial

• 无状态迭代器
• 有状态迭代器

## 无状态迭代器

function square(iteratorMaxCount,currentNumber)
if currentNumber<iteratorMaxCount
then
currentNumber = currentNumber+1
return currentNumber, currentNumber*currentNumber
end
end

for i,n in square,3,0
do
print(i,n)
end

1   1
2   4
3   9

function square(iteratorMaxCount,currentNumber)
if currentNumber<iteratorMaxCount
then
currentNumber = currentNumber+1
return currentNumber, currentNumber*currentNumber
end
end

function squares(iteratorMaxCount)
return square,iteratorMaxCount,0
end

for i,n in squares(3)
do
print(i,n)
end

1   1
2   4
3   9

## 有状态迭代器

array = {"Lua", "Tutorial"}

function elementIterator (collection)
local index = 0
local count = #collection
-- 返回闭包函数
return function ()
index = index + 1
if index <= count
then
-- 返回迭代器的当前元素
return collection[index]
end
end
end

for element in elementIterator(array)
do
print(element)
end

Lua
Tutorial