【问题标题】:Why does an if without an else always result in () as the value?为什么没有 else 的 if 总是导致 () 作为值?
【发布时间】:2017-04-11 01:14:08
【问题描述】:

来自tutorial

没有 else 的 if 总是以 () 作为值。

为什么 Rust 会施加这个限制并且不允许没有 elseif 返回其他值,如下所示:

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

【问题讨论】:

    标签: rust


    【解决方案1】:

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

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

    您可能认为 if-without-else-expression 可以返回 Option<_>,但是...

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

    在 Rust 中,几乎所有内容都是表达式(let-bindings 和以分号结尾的表达式除外,即所谓的表达式语句)。还有一些表达式总是返回() 的例子,因为没有其他意义。这些包括(复合)赋值(why?)、循环和 if-without-else。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-17
      • 1970-01-01
      • 2014-03-25
      • 2022-11-17
      相关资源
      最近更新 更多