omori-Sakuya

迭代器的练习 (未完成) (道阻且长)

第一题

 

第一题很简单,用闭包实现


function fromto(n,m) local iter = n return function () if iter <= m then iter = iter + 1 return iter-1 end end end for i in fromto(2,6) do print(i) end

也可以不用闭包,用一个更简单的工厂将参数的位置改一下,无状态的迭代器开销更小

第二题

 

复习一下无状态迭代器的要求

每一次迭代,迭代函数都是用两个变量(状态常量和控制变量)的值作为参数被调用,一个无状态的迭代器只利用这两个值可以获取下一个元素。

先写有状态的迭代器

function fromto(n,m,s)
    local iter = n
    return function ()
        if iter <= m
            then
            iter = iter + s
            return iter - s
        end
    end
end




for i in fromto(2,20,2) do
    print(i)
end

 

posted on 2023-07-07 13:55  omori_Sakuya  阅读(9)  评论(0编辑  收藏  举报

导航