Rust-这里需要分号吗?

此代码的目的是从 1 到 4 循环并停止。我的问题是为什么如果我在 else 语句 (;) 中添加或保留分号并不重要……代码编译得很好。最好的方法是什么?添加分号还是保留它?

fn main() {
    let mut var = 1;
    loop{
        println!("It is now {}", var);
        if var >= 4 {
            println!("Finished the loop");
            break;
            
        } else {
            var = var + 1;
        }
    }
}

回答

通常,尾随分号确定块的返回值。如果省略分号,则返回值是块中最后一个表达式的值。包含分号后,返回值始终是 Rust 的单元值,即空元组()(除非块包含不返回的表达式,在这种情况下,返回类型是“never”类型!,它没有任何值) .

在这种特殊情况下,没有语义差异。赋值表达式也返回单位值,即(var = var + 1) == ()。然而,这或多或少是巧合。您实际上不想在该语句中返回任何值,因此包含分号会使您的意图更加清晰。

  • Well I was almost posting the same answer right before this one, let me support this with the [reference link](https://doc.rust-lang.org/reference/expressions/operator-expr.html#assignment-expressions), which points: _"An assignment expression always produces the unit value."_

以上是Rust-这里需要分号吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>