2016-05-01 102 views

回答

3

一个receive表达式仅处理一条消息。处理这种情况的通常方法是将receive表达式放入一个函数中,并在完成处理消息后使其再次递归调用自身。

defmodule Receiver do 
    def loop do 
    receive do 
     :exit -> :ok # don't recurse 
     x -> 
     IO.puts x 
     loop 
    end 
    end 
end 

parent = self() 

spawn_link(fn -> 
    send(parent, "foo") 
    send(parent, "bar") 
    send(parent, :exit) 
end) 

Receiver.loop 

打印使用

foo 
bar 

receiven CAN消息:

defmodule Receiver do 
    def loop(0), do: :ok 
    def loop(n) do 
    receive do 
     x -> 
     IO.puts x 
     loop(n - 1) 
    end 
    end 
end 

parent = self() 

spawn_link(fn -> 
    send(parent, "foo") 
    send(parent, "bar") 
end) 

Receiver.loop(2) 

这也打印

foo 
bar 
+0

谢谢!我现在可以让额头上的瘀伤开始愈合! –

相关问题