Skip to content

Commit

Permalink
Document if/while let chains
Browse files Browse the repository at this point in the history
  • Loading branch information
est31 committed Nov 25, 2024
1 parent ff1c198 commit 4c7516b
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
- [Language](rust-2024/language.md)
- [RPIT lifetime capture rules](rust-2024/rpit-lifetime-capture.md)
- [`if let` temporary scope](rust-2024/temporary-if-let-scope.md)
- [`let` chains in `if` and `while`](rust-2024/let-chains.md)
- [Tail expression temporary scope](rust-2024/temporary-tail-expr-scope.md)
- [Match ergonomics](rust-2024/match-ergonomics.md)
- [Unsafe `extern` blocks](rust-2024/unsafe-extern.md)
Expand Down
37 changes: 37 additions & 0 deletions src/rust-2024/let-chains.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# `let` chains in `if` and `while`

## Summary

- Allow chaining of `let` expressions in the condition operand of `if` and `while` expressions.

## Details

Starting with the 2024 Edition, it is now allowed to have chaining of `let` expressions inside `if` and `while` condition operands,
where chaining refers to `&&` chains. The `let` expressions still have to appear at the top level,
so `if (let Some(hi) = foo || let Some(hi) = bar)` is not allowed.

Before 2024, the `let` had to appear directly after the `if` or `while`, forming a `if let` or `while let` special variant.
Now, `if` and `while` allow chains of one or more `let` expressions, possibly mixed with expressions that are `bool` typed.

<!-- TODO: edition2024 -->
```rust
fn sum_first_two(nums: &[u8]) -> Option<u8> {
let mut iter = nums.iter();
if let Some(first) = iter.next()
&& let Some(second) = iter.next()
{
first.checked_add(second)
} else {
None
}
}
```

The feature is edition gated due to requiring [if let rescoping], which is a Edition 2024 change.

## Migration

The switch to Edition 2024 doesn't neccessitate any migrations due to this feature,
as it creates a true extension of the set of allowed Rust programs.

[if let rescoping]: temporary-if-let-scope.html

0 comments on commit 4c7516b

Please sign in to comment.