通过错误转发执行一系列Erlang函数

时间:2019-05-21 14:49:23

标签: erlang

我想执行一系列函数,这些函数可以返回相同的值(ok{error, SomeError}),如果其中任何一个失败,则将错误向上转发。我知道如何使用许多嵌套的case-of语句来实现这一点,如下所示。

case fun1 of
  ok ->
    case fun2 of
      ok ->
        ...;
      {error, Error} ->
        {error, Error};
  {error, Error} ->
    {error, Error}
end.

还有其他方法可以更优雅地做到这一点吗,例如可以用Rust语言通过结果转发来做到这一点?

1 个答案:

答案 0 :(得分:3)

为什么不像下面这样使用try..catch: //编辑:似乎{error, Error}来自erlang:error/1。这不是成功的模式,因此我需要一点点更改代码。

test()->
    try
        func1(),
        func2()
    of
        ok -> do_any_thing()
    catch
        error:Error -> {error, Error)
    end.