迭代器与closure
function allwords() local line=io.read() local pos=1 return function() while line do local s,e=string.find(line,"%w+",pos) if s then pos=e+1 return string.sub(line,s,e) else line=io.read() pos=1 end end print("function endddddddddd") return nil end end for word in allwords() do print(11111) print(word) end
无状态的迭代器
local function iter(a,i) i=i+1 local v=a[i] if v then return i,v end end function ipairs(a) -- return iter,a,0 --正确--for获得3个值,迭代器函数,恒定状态,以及控制变量 return iter(a,1) --错误 end a={4,5,6,7} --for k,v in ipairs(a) do -- print(k,v) --end for k,v in next,a do print(k,v) end
复杂迭代器
--复杂迭代器,不需要定义局部变量pos 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 end return nil end for word in allwords() do print(11111) print(word) end
真实迭代器
function allwords(f) for line in io.lines() do for word in string.gmatch(line,"%w+") do f(word) end end end allwords(print)