3.迭代
function enum(array)
local index=1
return function()
local ret=array[index]
index=index+1
return ret
end
end
--遍历
function foreach(array,action)
for element in enum(array ) do
action(element)
end
end
--指定action为打印
foreach({1,2,3},print)
运行结果:
4.协程(生产者和消费者的问题)
--producer
function producer()
return coroutine.create(
function(salt)
local t={1,2,3}
for i=1,#t do
salt=coroutine.yield(t[i]+salt)
end
end)
end
--consumer 参数为生产者生产的结果
function consumer(prod)
local salt=10
while true do
local running,producer=coroutine.resume(prod,salt)
salt=salt*salt
if running then
print(producer or "end")
else
break
end
end
end
consumer(producer())
运行结果:
在做完t[i]+salt之前,协程还处于running的状态,而后直接挂起,producer的值为11;
第二次yield之前,salt的值已经变为100,加上t[2],为102,以此类推