Pet*_*ter 1 program-entry-point rust rust-result
我正在阅读《Rust by Examples》一书。在此示例中,删除returninErr(e) => return Err(e)会导致错误:expected `i32`, found enum `Result`` 。这是为什么?
Err(e) => return Err(e)和 和有什么区别Err(e) => Err(e)?
这是示例中的代码:
use std::num::ParseIntError;
fn main() -> Result<(), ParseIntError> {
let number_str = "10";
let number = match number_str.parse::<i32>() {
Ok(number) => number,
Err(e) => return Err(e),
};
println!("{}", number);
Ok(())
}
Run Code Online (Sandbox Code Playgroud)
let number = match number_str.parse::<i32>() {
Ok(number) => number,
Err(e) => return Err(e),
};
Run Code Online (Sandbox Code Playgroud)
这表示如果number_str.parse::<i32>()返回Ok设置number为numberi32。如果它返回一个Errto ,则立即 return Err(e),即 a Result, from main,number未设置。
这很好,因为number只能是 ani32并且main确实返回 a Result。
let number = match number_str.parse::<i32>() {
Ok(number) => number,
Err(e) => Err(e),
};
Run Code Online (Sandbox Code Playgroud)
这表示 ifnumber_str.parse::<i32>()返回一个Ok设置为 i32 的number值number,与之前相同。如果它返回一个Err设置number为Err(e),这是一个Result。
number不能同时是 ani32和 a Result,因此您会收到编译器错误。