有没有将错误转换为恐慌的宏?

4

是否有一种宏,类似于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(...));
}

2
我认为 expect 函数是你正在寻找的,尽管它不是一个宏。 - user25064
1个回答

6
这正是 Result::unwrapResult::expect 方法所做的事情。
我知道你正在寻求一个宏,但我认为你的用例可以通过使用 unwrap 方法来实现:
#[test]
fn foo() {
    let c = File::open(...).unwrap();
    // vs
    let c = tryfail!(File::open(...));
}

请注意,在非测试代码中,更加惯用的做法是使用expect
如果你真的需要一个宏,可以使用unwrap编写一个。

4
请注意,Option::expectOption::unwrap也存在。 - Shepmaster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接