首页 > 解决方案 > 为什么在 rust 函数的末尾 Ok(()) 之后没有分号?

问题描述

取自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 `()`

这是为什么?

标签: rustsemicolon-inference

解决方案


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

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

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


推荐阅读