2016-05-01 4 views

答えて

3

receive 1つのメッセージのみが処理されます。これを処理する通常の方法は、関数内に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メッセージ:

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

ありがとうございます!私は今、私の額に傷が治癒始めることができます! –

関連する問題