lua協同程式實現管道過濾器
阿新 • • 發佈:2019-02-03
--消費者驅動,協同程式實現管道過濾器 function receive(prod)--啟動協程,獲取返回值 local status,value=coroutine.resume(prod) return value end function send(x)--返回新值並掛起 coroutine.yield(x) end function producer()--建立協程返回讀取的值 return coroutine.create(function() while true do local x=io.read() send(x) end end) end function filter(prod)--建立協程對值進行處理並返回 return coroutine.create(function() for i=1,math.huge do local x=receive(prod)--開啟生產者協程 x=string.format("%5%s",i,x) send() end end) end function consumer(prod) while true do local x=receive(prod)--開啟過濾器協程 io.write(x,"\n") end end consumer(filter(producer()))