Lua迭代器
Lua 迭代器
迭代器是用于遍历集合或容器中元素的一种结构。在 Lua 语言中,集合往往指的是可以用来创建各种数据结构的表。比如,数组就是用表来创建的。
通用迭代器
通用迭代器可以访问集合中的键值对。下面是通用迭代器的一个简单例子:
1 | array = {"Lua", "Tutorial"} |
1 Lua
2 Tutorial
1 |
|
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 1
2 4
3 9
1 |
|
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 1
2 4
3 9
1 |
|
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
1 |
|
Lua
Tutorial
上面的例子中我们可以看到,在 elementIterator 函数内定义了另外一个匿名函数。此匿名函数中使用了一个外部变量 index (译注:此变量在匿名函数之外,elementIterator 函数内)。每次内部的匿名函数被调用时,都会将 index 的值增加 1,并统计数返回的每个元素。
我们可以参照上面的方法使用闭包创建一个迭代器函数。每次我们使用迭代器遍历集合时,它都可以返回多个元素。