繁体   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