4

取自current_dir文档的代码片段:

use std::env;

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

我注意到,仅在 之后添加分号Ok(()),程序无法编译并出现以下错误:

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

这是为什么?

4

1 回答 1

5

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

这个问题也在这里问和回答:Rust 中分号是可选的吗?

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

于 2020-03-08T15:14:33.170 回答