是否有宏将错误转换为恐慌?

时间:2016-06-08 09:44:19

标签: 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]
fn foo() {
    let c = tryfail!(File::open(...));
}

1 个答案:

答案 0 :(得分:6)

这正是方法Result::unwrapResult::expect所做的。

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

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

请注意,在未经测试的代码中,使用expect的{​​{3}}更多。

如果你真的想要一个宏,你可以用unwrap来写一个。