我想执行一系列函数,这些函数可以返回相同的值(ok
或{error, SomeError}
),如果其中任何一个失败,则将错误向上转发。我知道如何使用许多嵌套的case-of语句来实现这一点,如下所示。
case fun1 of
ok ->
case fun2 of
ok ->
...;
{error, Error} ->
{error, Error};
{error, Error} ->
{error, Error}
end.
还有其他方法可以更优雅地做到这一点吗,例如可以用Rust语言通过结果转发来做到这一点?
答案 0 :(得分:3)
为什么不像下面这样使用try..catch
:
//编辑:似乎{error, Error}
来自erlang:error/1
。这不是成功的模式,因此我需要一点点更改代码。
test()->
try
func1(),
func2()
of
ok -> do_any_thing()
catch
error:Error -> {error, Error)
end.