您的位置:首页 > 编程语言 > Lua

Lua 迭代器

2015-10-28 17:24 381 查看
第一种: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


第二种:使用泛型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)的各种变形
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: