21.15 The let else Construct (Rust 1.65+)
Rust 1.65 introduced let else, which allows a refutable pattern in a let binding. If the pattern match fails, an else block runs and must diverge (e.g., via return or panic!). Otherwise, the matched bindings are available in the surrounding scope:
fn process_value(opt: Option<i32>) { let Some(val) = opt else { println!("No value provided!"); return; }; // If we reach this line, opt matched Some(val). println!("Got value: {}", val); } fn main() { process_value(None); process_value(Some(42)); }
Here, Some(val) is refutable. If opt is None, the else block executes and must end the current function (or loop). If opt is Some(...), the binding val is introduced into the parent scope.