为什么if/else语句结尾不加分号(;)?

5
在Rust中,我注意到除了两种语句之外,所有东西都是表达式。每个在末尾添加 ; 的表达式都会变成语句。Rust的语法要求语句跟随其他语句。
那么为什么不在 if / else “表达式” 的末尾添加 ; 呢?这也是一个表达式,所以为什么我们不这样做:
if true {
    println!("true");
} else {
    println!("false");
};

2
我不知道你是否会得到任何关于为什么Rust允许这样做的明确简洁的答案。可能只是因为“看起来更好”或者“其他类似语言也是这样做的”。值得一提的是,你可以在那里放置 ;,当我在一行上使用 if / else 作为三元语句时,我已经这样做了。 - Shepmaster
1
如果 ifwhilematch 表达式是语句的 "根" 表达式,那么分号可以省略。 - Francis Gagné
2
在Reddit上进行了广泛讨论 http://www.reddit.com/r/rust/comments/2qjvzr/why_ifelse_expression_in_rust_doesnt_end_with_a/ - huon
@dbaupp 这篇Reddit帖子是我发的。在这里发布我的问题后,似乎很少有人关注它。实际上,如果你对我的问题进行更多的实验,你会发现它比“看起来”更加令人困惑。 - user3071121
我不确定为什么这个问题会收到负评和4个关闭票。这是一个非常好的问题,Reddit上的答案非常好并且有趣。 - Nemanja Boric
2个回答

1
讨论中最常见的答案是,这样看起来更符合其他语言用户的期望,并且允许使用这种语法没有任何危害(因为由于分号在分支中,结果类型为())。

1
我猜因为在其他语言(如Java或Nginx-Conf)中,它是一个块表达式,所以分号只会在语句后面而不是块后面设置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接