Lua无状态迭代器

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

是不是觉得看代码更容易理解概念???哈哈哈 

猜你喜欢

转载自blog.csdn.net/HQ354974212/article/details/89377668