Error handling 是否有宏将错误转换为死机?

Error handling 是否有宏将错误转换为死机?,error-handling,macros,rust,panic,Error Handling,Macros,Rust,Panic,是否有类似于try宏的宏将错误转换为死机?我需要定义我自己的吗 例如,如果单元测试无法打开文件,我会感到恐慌。我目前的解决办法是: macro_rules! tryfail { ($expr:expr) => (match $expr { result::Result::Ok(val) => val, result::Result::Err(_) => panic!(stringify!($expr)) }) } #[test]

是否有类似于
try
宏的宏将错误转换为死机?我需要定义我自己的吗

例如,如果单元测试无法打开文件,我会感到恐慌。我目前的解决办法是:

macro_rules! tryfail {
    ($expr:expr) => (match $expr {
        result::Result::Ok(val) => val,
        result::Result::Err(_) => panic!(stringify!($expr))
    })
}

#[test]
fn foo() {
    let c = tryfail!(File::open(...));
}

这正是这些方法所要做的

我知道您要求的是宏,但我认为您的用例可以通过
unwrap
方法实现:

#[test]
fn foo() {
    let c = File::open(...).unwrap();
    // vs
    let c = tryfail!(File::open(...));
}
请注意,在非测试代码中,更多的是使用
expect


如果你真的想要一个宏,你可以使用
unwrap

编写一个宏。我认为expect函数就是你想要的,尽管它不是一个宏注释,而且也存在。