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, _
它不缝是一个元组,列表等。甚至当我用_
它不匹配。捕捉一个期望参数的宏吗?
答
Elixir是开源的,它有一个近乎完美的文档。
Kernel.SpecialForms.try/1
的catching throws and exits的小节揭示了整个事情。
是,try
is a macro由编译器内联并取决于子句的签名是transpiled to either :throw, _
or to _, _
。
+0
感谢您的链接。我想我的问题的一部分,令人惊讶的是,我期待catch部分中的模式匹配,因此Elixir类型就像元组一样,但是因为它是一个宏,它实际上需要两个参数。我同意文件是好的,但对于一个更好的细节仍然可以是不明显的。再次感谢您的回复。 – bexley
相关:我在Erlang的三种类型的异常的答案:https://*.com/a/45973542/320615 – Dogbert