lua学习之迭代器与泛型for 3

本文详细探讨了Lua中的迭代器,尤其是具有复杂状态的迭代器,对比了无状态迭代器,强调了真正迭代器的职责。还分析了迭代器与生成器的异同,包括它们在效率、函数调用和返回机制上的特点。
摘要由CSDN通过智能技术生成

迭代器与泛型 for 3

具有复杂状态的迭代器

  1. 使用 closure 可以保存迭代器所需保存的所有状态
  2. 也可以将迭代器所需的所有状态打包为一个 table 并保存在 恒定状态中
  3. 在循环过程中 恒定状态 总是同一个 table
  4. 但这个 table 的内容却可以改变即在循环过程中改变 table 数据
  5. 由于这种迭代器可以保存所有数据将其存储到 恒定状态中,因此第二个参数 控制变量 可以忽略
local iterator 
function allwords()
   local state = {line = io.read(), pos = 1}
   return iterator, state
end

function iterator(state)
	while state.line do -- 若为有效行的内容就进入循环
        -- 搜索下一个单词
        local s, e = string.find(state.line, "%w+", state.pos)
        if s then -- 找到一个单词
            state.pos = e + 1
            return string.sub(state.line, s, e)
        else -- 没有找到单词
            state.line = io.read() -- 尝试读取下一行
            state.pos = 1
        end
    en
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值