为什么在 main 中使用 Result 时,match 臂中需要 return ?

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)

Sch*_*ern 5

    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设置numbernumberi32。如果它返回一个Errto ,则立即 return Err(e),即 a Result, from mainnumber未设置。

这很好,因为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 的numbernumber,与之前相同。如果它返回一个Err设置numberErr(e),这是一个Result

number不能同时是 ani32和 a Result,因此您会收到编译器错误。