Elixir:试着捕获退出信号

问题描述:

虽然Elixir鼓励我们不要使用try/catch块,但有时候需要它们。在我写的一个应用程序中,我有以下try/catch的工作。Elixir:试着捕获退出信号

try do 
    message = GenServer.call(via, :get_messages) 
    {:ok, message} 
catch 
    :exit, _ -> {:error, "Process uuid no longer exists"} 
end 

在闭锁段我改变:exit, -{:exit, _}以为他们是一样的话,导致破译密码。

我的问题是什么是:exit, _

它不缝是一个元组,列表等。甚至当我用_它不匹配。捕捉一个期望参数的宏吗?

+0

相关:我在Erlang的三种类型的异常的答案:https://*.com/a/45973542/320615 – Dogbert

Elixir是开源的,它有一个近乎完美的文档。

Kernel.SpecialForms.try/1catching throws and exits的小节揭示了整个事情。

是,tryis a macro由编译器内联并取决于子句的签名是transpiled to either :throw, _ or to _, _

+0

感谢您的链接。我想我的问题的一部分,令人惊讶的是,我期待catch部分中的模式匹配,因此Elixir类型就像元组一样,但是因为它是一个宏,它实际上需要两个参数。我同意文件是好的,但对于一个更好的细节仍然可以是不明显的。再次感谢您的回复。 – bexley