为什么没有else的if总是会导致()作为值?

Nan*_*iao 4 rust

从本教程:

如果没有else总是会导致()作为值.

为什么Rust强加了这个限制,并且不让一个if没有else返回其他值,如下所示:

let y = if x == 5 { 10 };
Run Code Online (Sandbox Code Playgroud)

Luk*_*odt 12

对于你的例子,正确的问题是:" y如果x不是5 ,那么它的价值是多少?".这会发生什么?

let x = 3;
let y = if x == 5 { 10 };
println!("{}", y);  // what?!
Run Code Online (Sandbox Code Playgroud)

你可以认为if-without-else-expression可以返回一个Option<_>,但是......

  1. 这意味着核心语言依赖于另一个库项目(那些被称为lang项目),每个人都试图避免
  2. 你不要经常遇到这种情况
  3. 通过只添加一点代码(Some()&else { None })可以获得相同的行为

在Rust中,几乎所有东西都是一个表达式(除了let-bindings和以分号结尾的表达式,所谓的表达式语句).并且有一些表达总是会返回的例子(),因为没有别的东西是有道理的.这些包括(复合)赋值(为什么?),循环和if-without-else.