为什么在 Rust 函数的末尾 Ok(()) 后面没有分号?

Pau*_*erg 4 rust semicolon-inference

取自current_dir文档的代码片段:

use std::env;

fn main() -> std::io::Result<()> {
    let path = env::current_dir()?;
    println!("The current directory is {}", path.display());
    Ok(())
}
Run Code Online (Sandbox Code Playgroud)

我注意到只有在 之后添加分号Ok(()),程序才不会编译并出现以下错误:

error[E0308]: mismatched types
expected enum `std::result::Result`, found `()`
Run Code Online (Sandbox Code Playgroud)

这是为什么?

MtR*_*oad 5

Rust 返回最后一个表达式的值。当您在 之后添加分号时Ok(()),最终的表达式就变成了一个语句,因此它返回了该语句的“值”,也就是缺少值,也称为unit(称为“()”)。

这里也提出并回答了这个问题:Rust 中的分号是可选的吗?

Rust 文档中的表达式:https : //doc.rust-lang.org/stable/rust-by-example/expression.html