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

时间:2017-04-11 01:14:08

标签: rust

从此tutorial

  

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

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

let y = if x == 5 { 10 };

1 个答案:

答案 0 :(得分:11)

对于您的示例,正​​确的问题是:“如果y不是5,那么x的价值是多少?”。这会发生什么?

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

您可以认为if-without-else表达式可以返回Option<_>,但是......

  1. 这意味着核心语言依赖于另一个库项目(那些被称为 lang items ),每个人都试图避免
  2. 你不经常遇到这种情况
  3. 只需添加一点代码(Some()&amp; else { None })即可获得相同的行为
  4. 在Rust中,几乎所有东西都是一个表达式(let除外) - 以分号结尾的绑定和表达式,所谓的表达式语句)。并且有一些表达式总是返回()的例子,因为没有别的意义。这些包括(复合)分配(why?),循环和if-without-else。