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)的各种变形
posted @ 2015-10-28 17:24  zyh_think  阅读(181)  评论(0编辑  收藏  举报