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

lak*_*tak 4 error-handling macros panic rust

是否存在将错误转换为恐慌的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(...));
}
Run Code Online (Sandbox Code Playgroud)

mal*_*rbo 6

这正是方法Result::unwrapResult::expect做法.

我知道你要求一个宏,但我认为你的用例可以通过以下unwrap方法实现:

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

请注意,在代码不是测试,它更习惯使用expect.

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

  • 注意,[`选项:: expect`](http://doc.rust-lang.org/core/option/enum.Option.html#method.expect)和[`选项:: unwrap`](HTTP:/ /doc.rust-lang.org/core/option/enum.Option.html#method.unwrap)也存在. (4认同)