首页 > 解决方案 > 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(())
}

有没有办法做到这一点或解决这个问题的编程模式?

标签: error-handlingrusthook

解决方案


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

如果您对此功能感兴趣,我建议您在此问题上+1


推荐阅读