File tree 2 files changed +38
-0
lines changed
2 files changed +38
-0
lines changed Original file line number Diff line number Diff line change 42
42
- [ Language] ( rust-2024/language.md )
43
43
- [ RPIT lifetime capture rules] ( rust-2024/rpit-lifetime-capture.md )
44
44
- [ ` if let ` temporary scope] ( rust-2024/temporary-if-let-scope.md )
45
+ - [ ` let ` chains in ` if ` and ` while ` ] ( rust-2024/let-chains.md )
45
46
- [ Tail expression temporary scope] ( rust-2024/temporary-tail-expr-scope.md )
46
47
- [ Match ergonomics] ( rust-2024/match-ergonomics.md )
47
48
- [ 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