我有一些这样的代码:
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)
请注意,上面的代码只是问题的最小可行示例。我想要这个,因为我在更复杂的代码库中面临大量类型重复。
您可以让 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)