Should `let match (..) { .. } else` compile?
⚓ Rust 📅 2025-07-28 👤 surdeus 👁️ 11I wrote a let .. else pattern but then converted the inner check to a match expresion but was surprised it won't compile. Is this intended?
Here reduced:
fn does_not_compile() -> Option<usize> {
struct Inner {
value: usize,
}
let a = Some(Inner { value: 1337 });
let Some(b) = match a {
Some(inner) => Some(inner.value),
_ => None
} else {
return None;
};
Some(b)
}
fn compiles_when_we_add_parentheses() -> Option<usize> {
struct Inner {
value: usize,
}
let a = Some(Inner { value: 1337 });
let Some(b) = (match a {
Some(inner) => Some(inner.value),
_ => None
}) else {
return None;
};
Some(b)
}
compiler says:
error: right curly brace `}` before `else` in a `let...else` statement not allowed
--> libs/universe/src/entity.rs:2026:5
|
2026 | } else {
| ^
|
help: wrap the expression in parentheses
|
2023 ~ let Some(b) = (match a {
2024 | Some(inner) => Some(inner),
2025 | _ => None
2026 ~ }) else {
|
2 posts - 2 participants
🏷️ Rust_feed