I have the following code:
use std::collections::HashSet;
fn translate() -> Option {
None
}
fn main() {
let mut found = HashSet::new()
According to the Rust Book (emphasis mine):
The value of the expression is the value of the last expression in whichever branch was chosen. An
if
without anelse
always results in()
as the value.
This gives a constraint on the expression value inside the curly braces.
This is correct since the expression type matches ()
:
if let Some(_) = some() {
()
};
This is correct since there's an else
statement (and the types between the branches match):
if let Some(_) = some() {
true
} else {
false
};
But this is wrong:
if let Some(_) = some() {
true
};
This answer was inspired by this comment.