File tree Expand file tree Collapse file tree 2 files changed +38
-0
lines changed Expand file tree Collapse file tree 2 files changed +38
-0
lines changed Original file line number Diff line number Diff line change 4242 - [ Language] ( rust-2024/language.md )
4343 - [ RPIT lifetime capture rules] ( rust-2024/rpit-lifetime-capture.md )
4444 - [ ` if let ` temporary scope] ( rust-2024/temporary-if-let-scope.md )
45+ - [ ` let ` chains in ` if ` and ` while ` ] ( rust-2024/let-chains.md )
4546 - [ Tail expression temporary scope] ( rust-2024/temporary-tail-expr-scope.md )
4647 - [ Match ergonomics] ( rust-2024/match-ergonomics.md )
4748 - [ Unsafe ` extern ` blocks] ( rust-2024/unsafe-extern.md )
Original file line number Diff line number Diff line change 1+ # ` let ` chains in ` if ` and ` while `
2+
3+ ## Summary
4+
5+ - Allow chaining of ` let ` expressions in the condition operand of ` if ` and ` while ` .
6+
7+ ## Details
8+
9+ Starting with the 2024 Edition, it is now allowed to have chaining of ` let ` expressions inside ` if ` and ` while ` condition operands,
10+ where chaining refers to ` && ` chains. The ` let ` expressions still have to appear at the top level,
11+ so ` if (let Some(hi) = foo || let Some(hi) = bar) ` is not allowed.
12+
13+ Before 2024, the ` let ` had to appear directly after the ` if ` or ` while ` , forming a ` if let ` or ` while let ` special variant.
14+ Now, ` if ` and ` while ` allow chains of one or more ` let ` expressions, possibly mixed with expressions that are ` bool ` typed.
15+
16+ <!-- TODO: edition2024 -->
17+ ``` rust
18+ fn sum_first_two (nums : & [u8 ]) -> Option <u8 > {
19+ let mut iter = nums . iter ();
20+ if let Some (first ) = iter . next ()
21+ && let Some (second ) = iter . next ()
22+ {
23+ first . checked_add (second )
24+ } else {
25+ None
26+ }
27+ }
28+ ```
29+
30+ The feature is edition gated due to requiring [ if let rescoping] , which is a Edition 2024 change.
31+
32+ ## Migration
33+
34+ The switch to Edition 2024 doesn't neccessitate any migrations due to this feature,
35+ as it creates a true extension of the set of allowed Rust programs.
36+
37+ [ if let rescoping ] : temporary-if-let-scope.html
You can’t perform that action at this time.
0 commit comments