版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HQ354974212/article/details/89377668
无状态的迭代器 是指不保留任何状态的迭代器,因此在循环中我们可以利用无状态迭代器避免创建闭包花费额外的代价。
每一次迭代,迭代函数调用 状态常量、控制变量 两个参数,一个无状态的迭代器只利用这两个值可以获取下一个元素。
不啰嗦概念,看代码,来理解:
--求数字j到N的平方
function square(N, j)
if j <= N
then
return j+1 , j*j -- 这里的j+1 是为了传给for的i值,类似++i,否则i一直不变,死循环
end
end
-- 迭代器函数、恒定状态、控制变量的初值
for i,n in square , 3 , 1
do
--这里的i,n是square返回的
print(i-1 ,"的平方是" , n)
end
这里需要注意的是,i 、 n的值是由square返回的
有了上面这个例子,我们可以模仿,写出遍历数组的
function iter (a, i)
local v = a[i]
if v then
return i+1, v
end
end
t={1,2,3,4,5}
-- 迭代函数,状态常量t,控制变量初值
for i,n in iter, t, 1
do
print(i-1,n)
end
有了上面这个例子,我们可以轻松模拟ipairs
function iter (a, i)
i=i+1
local v = a[i]
if v then
return i, v
end
end
function MyIpairs(b)
-- 迭代函数,状态常量,控制变量初值
return iter , b, 0
end
t={1,2,3,4,5}
for i,n in MyIpairs(t)
do
print(i,n)
end
是不是觉得看代码更容易理解概念???哈哈哈