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

Why my receive method is stopping my iex?

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

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

receive 默认情况下没有超时,因此进程将被阻塞,直到当前进程收到匹配任何模式的消息。如果您只是玩玩,可以使用 after 设置超时以确保不会发生这种情况:

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

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