我在我的iex终端上编写了以下代码,之后它不再响应,终端就停止了,就像它期待别的东西一样。究竟发生了什么?
receive do
{:hello, msg} -> msg
{:world, msg} -> "won't match"
end
答案 0 :(得分:1)
receive
没有超时,因此在当前进程收到与任何模式匹配的消息之前,将阻止该进程。如果您只是在玩游戏,可以使用after
设置超时,以确保不会发生这种情况:
receive do
{:hello, msg} -> msg
...
after 5000 -> :timeout
end
如果在5000毫秒内没有收到与模式匹配的消息,表达式现在将返回:timeout
。