从 if 语句内部返回时键入不匹配

Als*_*afi 4 type-mismatch rust

以下代码无法编译:

fn testing() -> i32 {
    let x = 5;
    if x == 5 {
        5
    }
    6
}
Run Code Online (Sandbox Code Playgroud)

出现此错误:

fn testing() -> i32 {
    let x = 5;
    if x == 5 {
        5
    }
    6
}
Run Code Online (Sandbox Code Playgroud)

如果我return在 前面放了一个显式5,或者如果我把6里面放了一个else块,一切正常。Rust 到底在抱怨什么?

Tim*_*ann 6

在 Rust 中,几乎所有东西都是一个表达式,包括if- elseif生成一个值,但如果表达式失败(即x != 5),则表达式没有值。将6放入 else 块时,if-else语句返回一个整数(i32由于返回类型,这将是一个)。您可以使用分号取消语句的值。

return 5(注意,没有分号)也是一个语句,结果是(). 现在if表达式总是返回(),这很好。

习惯上你应该更喜欢这个else变体,所以你可以省略return

fn testing() -> i32 {
    let x = 5;
    if x == 5 {
        5
    } else {
        6
    }
}
Run Code Online (Sandbox Code Playgroud)