【问题标题】:Why no semicolon after Ok(()) at the end of a function in rust? [duplicate]为什么在 rust 函数的末尾 Ok(()) 之后没有分号? [复制]
【发布时间】:2020-06-20 15:40:09
【问题描述】:

代码 sn-p 取自 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 semicolon-inference


    【解决方案1】:

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

    这个问题也在这里问和回答:Are semicolons optional in Rust?

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

    【讨论】:

      猜你喜欢
      • 2013-02-25
      • 1970-01-01
      • 2015-05-29
      • 2017-08-22
      • 2011-12-23
      • 1970-01-01
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多