迭代器与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 endendfor 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 endendfunction ipairs(a)-- return iter,a,0 --正确--for获得3个值,迭代器函数,恒定状态,以及控制变量 return iter(a,1) --错误enda={ 4,5,6,7}--for k,v in ipairs(a) do -- print(k,v)--endfor k,v in next,a do print(k,v)end
复杂迭代器
--复杂迭代器,不需要定义局部变量poslocal iteratorfunction allwords() local state={line=io.read(),pos=1} return iterator,stateendfunction 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 nilendfor 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 endendallwords(print)