是否有将错误转换为恐慌的宏?
Is there a macro to convert an Error to 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(...));
}
这正是方法 Result::unwrap
and Result::expect
所做的。
我知道您需要一个宏,但我认为您的用例可以通过 unwrap
方法来实现:
#[test]
fn foo() {
let c = File::open(...).unwrap();
// vs
let c = tryfail!(File::open(...));
}
请注意,在非测试代码中,使用 expect
更 idiomatic。
如果你真的想要一个宏,你可以用unwrap
写一个。
是否有类似于 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(...));
}
这正是方法 Result::unwrap
and Result::expect
所做的。
我知道您需要一个宏,但我认为您的用例可以通过 unwrap
方法来实现:
#[test]
fn foo() {
let c = File::open(...).unwrap();
// vs
let c = tryfail!(File::open(...));
}
请注意,在非测试代码中,使用 expect
更 idiomatic。
如果你真的想要一个宏,你可以用unwrap
写一个。