Rust有提前返回错误的挂钩吗



panic!允许设置自定义(尽管是全局(挂钩。对于?运算符的早期退货,有什么可比的吗?我有一个函数,需要在退出之前以特殊方式关闭一些资源。我可以编写一个函数ok_or_close(),在返回错误之前关闭资源:

fn opens_resources() -> Result<(), MyError> {
//Opens some stuff.
//Now a bunch of functions that might raise errors.
ok_or_close(foo(), local variables)?;
ok_or_close(bar(), local variables)?;
ok_or_close(baz(), local variables)?;
ok_or_close(Ok(()), local variables)
}

但这似乎很冗长。我真正想做的是:

fn opens_resources() -> Result<(), MyError> {
//Opens some stuff.
//Now a bunch of functions that might raise errors.
foo()?;
bar()?;
baz()?;
on_err:
//Closes some stuff. Would prefer not to make
//  this a function, uses many local variables.
Ok(())
}

有没有办法做到这一点,或者有没有绕过这一点的编程模式?

最接近这一点的是Try特性,它允许您如何实现?影响特定类型,但遗憾的是,正如所说,这仍然是一个夜间实验

如果你对这个功能感兴趣,我建议你在这个问题上给打+1

最新更新