Tired of deeply nested if let blocks? Rust 2024 edition brings let chains — chain multiple let patterns with && in a single if expression.
1
2
3
4
5
6
7
8
| // Before: nested and hard to read
if let Some(a) = opt_a {
if let Some(b) = opt_b {
if a > 0 {
println!("{a} + {b} = {}", a + b);
}
}
}
|
With let chains, flatten the whole thing:
1
2
3
4
5
6
| if let Some(a) = opt_a
&& let Some(b) = opt_b
&& a > 0
{
println!("{a} + {b} = {}", a + b);
}
|
Works with while too!
1
2
3
4
5
6
7
8
9
| let mut iter = vec![Some(1), Some(2), None, Some(4)].into_iter();
while let Some(inner) = iter.next()
&& let Some(val) = inner
{
println!("got: {val}");
}
// prints: got: 1, got: 2
// stops at None — the inner let fails
|
You can mix boolean expressions and let bindings freely. Each && can be either a regular condition or a pattern match.
Note: requires edition 2024 (edition = "2024" in Cargo.toml).