【问题标题】:Convert Erlang catch to Elixir将 Erlang catch 转换为 Elixir
【发布时间】:2016-06-30 12:04:05
【问题描述】:

在 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]

【问题讨论】:

标签: erlang elixir


【解决方案1】:

Expression catchtry 表达式的旧版本。它总是返回一些东西并捕获所有异常,将它们转换为文档中所述的术语:

对于类错误的异常,即运行时错误,返回{'EXIT',{Reason,Stack}}。 对于类exit的异常,即exit(Term)的代码,返回{'EXIT',Term}。 对于 throw 类的异常,也就是 throw(Term) 的代码,返回的是 Term。

它是语言的结构,它的语法,所以需要在 Elixir 中实现(即与 Erlang 中的语义相同)。从文档看来,Elixir 只支持try semantic。您提出的解决方案是一个很好的解决方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-11
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 2017-06-24
    • 2015-07-01
    • 2017-02-07
    相关资源
    最近更新 更多