Elixir:尝试抓住退出信号

时间:2017-10-04 14:31:37

标签: elixir phoenix-framework

虽然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, _

它不会成为元组,列表等。即使我使用_它也不匹配。捕获一个需要参数的宏吗?

1 个答案:

答案 0 :(得分:1)

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

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

是的,try is a macro由编译器内联,并且根据子句的签名是transpiled to either :throw, _ or to _, _