2017-10-04 44 views
0

雖然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://stackoverflow.com/a/45973542/320615 – Dogbert

回答

1

Elixir是開源的,它有一個近乎完美的文檔。

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

是,tryis a macro由編譯器內聯並取決於子句的簽名是transpiled to either :throw, _ or to _, _

+0

感謝您的鏈接。我想我的問題的一部分,令人驚訝的是,我期待catch部分中的模式匹配,因此Elixir類型就像元組一樣,但是因爲它是一個宏,它實際上需要兩個參數。我同意文件是好的,但對於一個更好的細節仍然可以是不明顯的。再次感謝您的回覆。 – bexley