FYI, if there isn't an else block, then the value of the else block is just unit, i.e. ()
.
So
if let <PATTERN> = <EXPRESSION> {
<STATEMENTS>
} // no `else` block
is equivalent to
match <EXPRESSION> {
<PATTERN> => {
<STATEMENTS>
}
_ => {}
}
or
match <EXPRESSION> {
<PATTERN> => {
<STATEMENTS>
}
_ => (),
}
and also, in this case, the block with <STATEMENTS>
cannot have a block-final-expression "return value" (or if they do, it must be of type ()
).
Although... perhaps you haven't even considered if let
that evaluates to a value. Let's look at an example:
let x: Option<i32> = ……;
let x_plus_one_or_zero = if let Some(value) = x {
value + 1
} else {
0
};
which of course is equivalent to doing
let x_plus_one_or_zero = match x {
Some(value) => {
value + 1
}
_ => {
0
}
}
or, if we skip the {}-braces for the match arms:
let x_plus_one_or_zero = match x {
Some(value) => value + 1,
_ => 0,
};