–18.1 18.2
其实就是闭包的运用,记住foreach迭代的规则是不变量和变量组合传入,返回索引和索引对应的值。
--18.1 18.2
local m = 1 --m就是步长,其实就是根据步长输出表的内容,说话都说不利索,我他吗真的是想打人,恶心
local function noState(n,i)
i = i+m
local v= n[i]
if v then
return i,v
end
end
for i,v in noState,{1,2,3,4,5},0 do
print(i.." "..v)
end
18.3
--18.3
function allWords(fname)
io.input(fname)
local d = {}
local r = {}
local pos = 1
local rpos = 0
local line = io.read()
while line do
local word,p = string.match(line,"(%w+)()",pos)
if word then
d[word] = d[word]==nil and 1 or d[word]+1
pos = p
else
line = io.read()
pos = 1
end
end
local cnt = 1
for k,v in pairs(d) do
if v==1 then
r[cnt] = k
cnt = cnt+1
end
end
return function()
rpos = rpos+1
return r[rpos]
end
end
for word in allWords("data.lua") do
print(word)
end
18.4
local str = "ice cold";
function getSub(s)
local bi = 1
local ei = 0
return function()
ei = ei+1
if ei>string.len(s) then
bi= bi+1
if bi>string.len(s) then
return nil
end
ei = bi
end
local sb = str:sub(bi,ei)
return str:sub(bi,ei)
end
end
for sb in getSub(str) do
print(sb)
end
18.5
算了吧,对老迭代器不敢兴趣