2017-10-04 18 views
0

エリクサーはtry/catchブロックを使用しないように勧めていますが、必要な時があります。私が書いたアプリケーションでは、次のtry/catchが動作します。キャッチセクションでエリクサー:終了信号をキャッチしてみてください

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

は、私は、彼らが同じものだったことを考える{:exit, _}:exit, -を変更し、それはコードを壊すことになりました。

私の質問は:exit, _

あるものそれは私がそれが一致しませんでした_を使用した場合でも、タプル、リスト、などであることを縫い目はありませんです。パラメータを期待するマクロをキャッチしていますか?

+0

関連性:Erlangの3種類の例外に関する私の答え:https://stackoverflow.com/a/45973542/320615 – Dogbert

答えて

1

エリクシールはオープンソースであり、ほぼ完全なドキュメントです。

Kernel.SpecialForms.try/1のサブセクションcatching throws and exitsはすべてを明らかにする。

はい

、コンパイラによってインライン化と句の署名に依存さ try is a macrotranspiled to either :throw, _ or to _, _です。

+0

リンクありがとうございます。私の疑問の一部は、驚いたことに、キャッチセクションではパターンマッチングが期待されていたため、タプルのようなエリクシールタイプが予想されていましたが、マクロであるため実際には2つの引数が必要です。私はドキュメンテーションが良いことに同意しますが、ノープのために細かい詳細はまだ明らかではありません。ご返信ありがとうございます。 – bexley

関連する問題