为什么我的接收方法会停止我的iex?

时间:2018-02-19 13:59:12

标签: elixir iex

我在我的iex终端上编写了以下代码,之后它不再响应,终端就停止了,就像它期待别的东西一样。究竟发生了什么?

receive do 
    {:hello, msg} -> msg          
    {:world, msg} -> "won't match" 
end

enter image description here

1 个答案:

答案 0 :(得分:1)

默认情况下,

receive没有超时,因此在当前进程收到与任何模式匹配的消息之前,将阻止该进程。如果您只是在玩游戏,可以使用after设置超时,以确保不会发生这种情况:

receive do
  {:hello, msg} -> msg
  ...
after 5000 -> :timeout
end

如果在5000毫秒内没有收到与模式匹配的消息,表达式现在将返回:timeout