Lua有状态迭代器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HQ354974212/article/details/89380343

lua中的迭代器通常使用函数来实现,当我们调用一次迭代器函数的时候,返回集合中的下一个元素,到这里,我们知道,那这个迭代器函数必须保存上一次调用时的一些状态,以便下一次调用,lua中的closure正好符合要求,我们可以把上一次调用的信息保存在closure中,然后就是我们需要一个返回这个迭代器的函数,我们可以把这个函数叫着生成迭代器的工厂函数。

看概念头疼,直接撸代码

--迭代器共厂函数
function iterCreater(a)
    local i= 1
    --返回一个closure用来保存 i 的值
    return function()
        e =a[i]
        i=i+1
        return e
    end
end


t={ 1,2,3,4,5 }

iter = iterCreater(t)

while true do
    local v = iter() --循环调用
    if v then
        print(v)
    else
        break
    end
end


我们可以利用泛型for来简化, for做的第一件事就是对in后面的表达式求值,这些表达式应该返回3个值供for保存: 迭代器函数、恒定状态和控制变量的初值。    iterCreater(t)返回了迭代器函数、(还缺两个返回,使用nil、nil) ,    v的值由迭代器函数(此处是无参数的)返回

--迭代器共厂函数
function iterCreater(a)
    local i= 1
    --返回一个closure用来保存 i 的值
    return function()
        e =a[i]
        i=i+1
        return e
    end
end


t={ 1,2,3,4,5 }


for  v in iterCreater(t) do
    print(v)
end

猜你喜欢

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