For your example, the right question is: “What would the value of y
be if x
is not 5?”. What would happen here?
let x = 3;
let y = if x == 5 { 10 };
println!("{}", y); // what?!
You could think that the if-without-else-expression could return an Option<_>
, but...
- this would mean that the core language depends on yet another library item (those are then called lang items) which everyone tries to avoid
- you don't run into this situation too often
- you can get the same behavior by adding only a little bit of code (
Some()
& else { None }
)
In Rust, nearly everything is an expression (with the exception of let
-bindings and expressions ending with a semicolon, so called expression statements). And there are a few examples of expressions always returning ()
, because nothing else makes sense. These include (compound-)assignments (why?), loops and if-without-else.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…