首页 > 解决方案 > 如果条件为假,我可以在 Rust 中使用什么运算符来返回特定错误?

问题描述

我有以下代码:

fn foo() -> Result<String, MyError> {
    assert_eq!(vec.len(), 2);
    unimplemented!()
}

pub enum MyError {
    Error1,
    Error2,
    Error3,
}

Err(MyError::Error3)如果vec.len() != 2不是恐慌,我想返回。有没有办法写得更好(通过使用一些运算符)除了

if vec.len() != 2 { return Err(MyError::Error3); }

标签: rust

解决方案


让我们为此编写一个宏!

macro_rules! assert_throw {
    ($cond:expr, $err:expr) => {
        if $cond {
            Err($err)?;
        }
    };
}

你可以像这样使用它:

fn foo(v: &[u32]) -> Result<String, MyError> {
    assert_throw!(v.len() != 3, MyError::Error1);

    Ok("Ok".to_string())
}

游乐场


推荐阅读