访问枚举变量类型

Ric*_*ann 0 enums types rust

我有一些这样的代码:

type MyResult = Result<u8, String>;

fn main() {
    match check(42) {
        Ok(number) => println!("OK: {}", number),
        Err(msg) => println!("Error: {}", msg),
    }

    match check(1337) {
        Ok(number) => println!("OK: {}", number),
        Err(msg) => println!("Error: {}", msg),
    }
}

fn check(number: i32) -> MyResult {
    if (0..256).contains(&number) {
        Ok(number as u8)
    } else {
        Err("Out of bounds!".to_string())
    }
}
Run Code Online (Sandbox Code Playgroud)

是否可以通过访问 的魔术成员或方法来获取此类型,而不是u8在 中再次显式指定?我基本上是在寻找类似的东西:check()MyResult

fn check(number: i32) -> MyResult {
    if (0..256).contains(&number) {
        Ok(number as MyResult::ok_type())
    } else {
        Err("Out of bounds!".to_string())
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,上面的代码只是问题的最小可行示例。我想要这个,因为我在更复杂的代码库中面临大量类型重复。

caf*_*e25 5

您可以让 Rust 推断类型:

fn check(number: i32) -> MyResult {
    if (0..256).contains(&number) {
        Ok(number as _)
    } else {
        Err("Out of bounds!".to_string())
    }
}
Run Code Online (Sandbox Code Playgroud)