当前位置: 首页 > 知识库问答 >
问题:

为什么在rust中函数末尾的Ok(())之后没有分号?[重复]

幸越泽
2023-03-14

从当前目录的文档中获取的代码片段:

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

为什么会这样?

共有1个答案

寇桐
2023-03-14

Rust返回最后一个表达式的值。当您在Ok(())之后添加分号时,最后的表达式成为一条语句,因此它返回语句的“值”,即缺少值,也称为单位(称为“()”)。

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

防锈文件上的表述:https://doc.rust-lang.org/stable/rust-by-example/expression.html

 类似资料:
  • 问题内容: 我正在尝试从C ++转向Java。 我想知道的是,在C ++中,在类定义之后,需要使用分号(),而在Java中则不需要。 也就是说,在C ++中: 但是在Java中: 很好,我知道。 但是, 我的问题是 : 当我在类定义的末尾添加分号时,Java也可以使用,例如: 我已经编译并执行了Java所示的两个程序片段,并且它们均有效。谁能解释为什么会这样?Java类定义末尾的分号代表什么? 很

  • 问题内容: 我已经看到不同的开发人员在javascript函数中包含分号,而有些还没有。哪个是最佳做法? 要么 问题答案: 分号后 函数的声明 是 没有必要的 。 a的语法在规范中描述为: 语法上没有分号,但可能想知道为什么? 分号用于将 语句 彼此分开,并且a 不是 语句 。 在代码执行之前进行评估,是用来解释这种行为的 常用词 。 术语“函数声明”和“函数声明”通常会错误地互换使用,因为ECM

  • 问题内容: 我只是想要一些有关此的信息。 什么是在的结尾文字呢?这叫什么?为什么使用它? 问题答案: 在表明它是一个浮点文字,不是双字面它并没有一个特定的技术名称,我知道(这将暗示以其它方式) -我倾向于把它称为“字母后缀”如果我需要参考具体来说,尽管有点武断! 例如: 您当然可以: …几乎可以完成同一件事,但是F是一种更简洁,更简洁的表示方式。 为什么选择double作为默认值而不是float?

  • 我正在尝试从C转换到Java。 我想知道的是,在C中,在类定义之后需要分号(),但在Java中则不是。 也就是说,在C中: 但在Java中: 那很好,我理解。 然而,我的问题是: 当我在类定义的末尾添加分号时,Java也可以工作,例如: 我已经编译并执行了为Java显示的两个程序片段,它们都有效。有人能解释为什么会这样吗?Java中类定义末尾的分号代表什么? 如果这个问题质量不高,我很抱歉,但我真

  • 问题内容: 我不小心写了一个Java语句,结尾有两个分号。Java编译器不显示任何错误,它可以运行。 码: 出于学习目的,我尝试在分号后添加不同的字符,并且Java编译器已将编译时错误显示为 令牌“)”上的语法错误,请删除此令牌 。 这个说法: 为什么Java将分号和其他字符视为不同? 问题答案: 因为双分号不会被视为双分号,而是会被视为分号和空语句。空的语句不执行任何操作,这不是错误。

  • 《防锈指南》规定: 分号将任何表达式转换为语句,方法是丢弃其值并返回单位。 我以为我把这个概念记下来了,直到我做了一个实验: 编译得很好。然后,我在返回行的末尾添加了一个分号()。据我所知,这将该行转换为语句,返回单位数据类型。 尽管如此,最终结果是一样的。