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

Why no semicolon after Ok(()) at the end of a function in rust?

摘自 current_dir 文档的代码片段:

use std::env;

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

我注意到只有在Ok(())后面加一个分号,程序does not compile才出现如下错误:

error[E0308]: mismatched types
expected enum `std::result::Result`, found `()`

这是为什么?

Rust returns 最后一个表达式的值。当你在Ok(())后面加上分号时,最后的表达式就变成了一个语句,所以它返回语句的"value",这是一个缺少值,也称为unit(称为“ ()").

这里也提出并回答了这个问题:Are semicolons optional in Rust?

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