lua中可以自定义迭代器,配合泛型for循环实现自定义功能.lua内部有两个迭代函数:pairs、ipairs.下面我们自己实现一下pairs.
for k, v in pairs (arr) do
end
1.迭代器有三个返回值:迭代函数,状态常量,控制变量. 上方的k, v其实是通过迭代函数返回的值;每次for循环, 状态常量和控制变量都会传入迭代函数中执行,直到返回值为nil.
function func (arr, index)
index = index + 1
if arr[index] then
--这里对应for循环中的k, v
return index, arr[index]
end
end
function iter (arr)
--这里每次for循环将arr, 0的值更新并传入func
return func, arr, 0
end
for k, v in iter ({'小明', 18}) do
print (k, v)
end
打印结果:
1 小明
2 18
[Finished in 0.1s]
2.迭代器只返回一个迭代函数. 迭代函数内部自己维护状态常量和控制变量.
function iter (arr)
local index = 0
return function ()
index = index + 1
if arr[index] then
return index, arr[index]
end
end
end
for k, v in iter ({'小明', 18}) do
print (k, v)
end
打印结果:
1 小明
2 18
[Finished in 0.1s]