2016-03-15 26 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。您提出的解决方案是一个很好的解决方法。