虽然Elixir鼓励我们不要使用try / catch块,但有时需要它们。在我写的应用程序中,我有以下try / catch,它有效。
try do
message = GenServer.call(via, :get_messages)
{:ok, message}
catch
:exit, _ -> {:error, "Process uuid no longer exists"}
end
在catch部分,我将:exit, -
更改为{:exit, _}
,认为它们是相同的,导致破坏了代码。
我的问题是:exit, _
它不会成为元组,列表等。即使我使用_
它也不匹配。捕获一个需要参数的宏吗?
答案 0 :(得分:1)
Elixir是开源的,它有一个近乎完美的文档。
<Kernel.SpecialForms.try/1
关于catching throws and exits的小节揭示了整个事情。
是的,try
is a macro由编译器内联,并且根据子句的签名是transpiled to either :throw, _
or to _, _
。