在Erlang中,我可以做类似
的事情[catch X+1 || X <- [4,a,6], X > 3].
获取结果,
[5, {‘EXIT’, _}, 7]
有人能告诉我怎样才能在Elixir中找到类似的东西吗?
我在Elixir中找不到catch
更新
经过一番尝试后,我想我找到了答案。
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 :(得分:3)
Expression catch
是try
表达式的旧版本。它总是返回一些内容并捕获所有异常,将它们转换为文档中所述的术语:
对于类错误的例外,即运行时错误,返回{&#39; EXIT&#39;,{Reason,Stack}}。 对于类exit的例外,即返回名为exit(Term),{&#39; EXIT&#39;,Term}的代码。 对于类throw的异常,即名为throw(Term)的代码,返回Term。
它是语言的构造,它的语法,因此需要在Elixir中实现(即具有与Erlang中相同的语义)。从文档中可以看出,Elixir仅支持try
semantic。您提出的解决方案是一个很好的解决方法。