1. 程式人生 > >lua協同程式實現管道過濾器

lua協同程式實現管道過濾器

--消費者驅動,協同程式實現管道過濾器
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()))