1
我有以下代码:这个Elixir脚本为什么只打印第一条消息?
parent = self()
spawn_link(fn ->
send(parent, "foo")
send(parent, "bar")
end)
receive do
x -> IO.puts x
end
当我运行此脚本“富”被打印出来,而不是“栏”。我是否错过了Elixir流程的基本知识?
我有以下代码:这个Elixir脚本为什么只打印第一条消息?
parent = self()
spawn_link(fn ->
send(parent, "foo")
send(parent, "bar")
end)
receive do
x -> IO.puts x
end
当我运行此脚本“富”被打印出来,而不是“栏”。我是否错过了Elixir流程的基本知识?
一个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
也receive
n
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
谢谢!我现在可以让额头上的瘀伤开始愈合! –