Lua 迭代器

  1. 第一种:lua迭代器的实现依赖于闭包(closure)特性

1.1 第一个简单的写法

--迭代器写法
function self_iter( t )
  local i = 0
    return function ()
        i = i + 1;
        return t[i]
    end
end
-- 使用
local t = {10, 20, 30}
local iter = self_iter(t)  -- 这里就是使用了闭包函数的特性
while true do
  local element = iter()
    if element == nil then break end
    print(element)
end
  1. 第二种:使用泛型for实现
    2.1 语法
for <var-list> in <exp-list> do
    <body>
end
2.2 泛型for理解:for做的第一件事就是对in后面的表达式进行求值,返回3个值,分别是迭代器函数(iter),恒定变量(table),控制变量(i),之后就会使用恒定变量和控制变量来调用迭代器函数

2.3 泛型for迭代器实现例子
-- 迭代器
local function self_iter( list, i )
    i = i + 1
    local v = list[i]
    print(v)
    if v then
        return i, v
    end
end

-- for 初始化
function self_ipairs( list )
    return self_iter, list, 0
end

-- 使用
local a = {10, 20, 40}

for k, v in self_ipairs(a) do
    print(k, ' ', v)
end
  • 注:各种复杂的迭代器实现就是对迭代器函数(iter)和恒定变量(table)的各种变形

转载于:https://www.cnblogs.com/zjzyh/p/4917975.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值