2016-03-15 32 views
2

在Erlang中,我可以這樣做轉換二郎漁獲藥劑

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

得到的結果,

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

誰能告訴我怎樣才能得到類似的藥劑的東西嗎? 我只是找不到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] 
+0

有關您的信息,這裏有更多關於此的信息:http://elixir-lang.org/getting-started/try-catch-and-rescue.html –

回答

3

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

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

它是一種語言結構,它的語法,因此需要在Elixir中實現(即使用與Erlang相同的語義)。從文檔看來,Elixir只支持try semantic。您提出的解決方案是一個很好的解決方法。