簡體   English   中英

轉換Erlang catch到Elixir

[英]Convert Erlang catch to Elixir

在Erlang中,我可以做類似的事情

[catch X+1 || X <- [4,a,6], X > 3].

得到結果,

[5, {‘EXIT’, _}, 7]

有人可以告訴我如何在Elixir中得到類似的東西嗎? 我只是在Elixir找不到catch

UPDATE

經過一番嘗試,我想我找到了答案。

iex(3)> a = for i <- [4, :a, 6] do
...(3)>   try do
...(3)>     i+1
...(3)>   catch
...(3)>     error, reason ->
...(3)>       {error, reason}
...(3)>   end
...(3)> end
[5, {:error, :badarith}, 7]

表達式catchtry表達式的舊版本。 它總是返回一些東西,並捕獲所有將它們轉換為文檔中所述術語的異常:

對於類錯誤(即運行時錯誤)的異常,將返回{'EXIT',{Reason,Stack}}。 對於類退出的異常,即返回稱為exit(Term),{'EXIT',Term}的代碼。 對於類throw的異常(即稱為throw(Term)的代碼),將返回Term。

它是語言及其語法的一種構造,因此需要在Elixir中實現(即與Erlang具有相同的語義)。 從文檔中看來,Elixir僅支持try語義 您提出的解決方案是一個不錯的解決方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM