Skip to content

Commit f153d01

Browse files
committed
Revise editorially
1 parent bd11808 commit f153d01

File tree

1 file changed

+25
-14
lines changed

1 file changed

+25
-14
lines changed

src/destructors.md

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,8 @@ let declared_first = PrintOnDrop("Dropped last in outer scope");
185185
let declared_last = PrintOnDrop("Dropped first in outer scope");
186186
```
187187

188-
r[destructors.scope.bindings.pattern-drop-order]
189-
If a pattern binds multiple variables, they are dropped in reverse order of declaration.
188+
r[destructors.scope.bindings.patterns]
189+
Variables in patterns are dropped in reverse order of declaration within the pattern.
190190

191191
```rust
192192
# struct PrintOnDrop(&'static str);
@@ -201,8 +201,8 @@ let (declared_first, declared_last) = (
201201
);
202202
```
203203

204-
r[destructors.scope.bindings.or-pattern-declaration-order]
205-
For the purpose of drop order, [or-patterns] declare their bindings in the order given by their first sub-pattern.
204+
r[destructors.scope.bindings.or-patterns]
205+
For the purpose of drop order, [or-patterns] declare bindings in the order given by the first subpattern.
206206

207207
```rust
208208
# struct PrintOnDrop(&'static str);
@@ -211,20 +211,31 @@ For the purpose of drop order, [or-patterns] declare their bindings in the order
211211
# println!("drop({})", self.0);
212212
# }
213213
# }
214-
// Drops `declared_last`, then `declared_first`.
215-
fn fixed_variable_drop_order<T>(
216-
(Ok([declared_first, declared_last])
217-
| Err([declared_last, declared_first])): Result<[T; 2], [T; 2]>
214+
// Drops `x` before `y`.
215+
fn or_pattern_drop_order<T>(
216+
(Ok([x, y]) | Err([y, x])): Result<[T; 2], [T; 2]>
217+
// ^^^^^^^^^^ ^^^^^^^^^^^ This is the second subpattern.
218+
// |
219+
// This is the first subpattern.
220+
//
221+
// In the first subpattern, `x` is declared before `y`. Since it is
222+
// the first subpattern, that is the order used even if the second
223+
// subpattern, where the bindings are declared in the opposite
224+
// order, is matched.
218225
) {}
219226

220-
fixed_variable_drop_order(Ok([
221-
PrintOnDrop("Dropped last"),
222-
PrintOnDrop("Dropped first"),
227+
// Here we match the first subpattern, and the drops happen according
228+
// to the declaration order in the first subpattern.
229+
or_pattern_drop_order(Ok([
230+
PrintOnDrop("Declared first, dropped last"),
231+
PrintOnDrop("Declared last, dropped first"),
223232
]));
224233

225-
fixed_variable_drop_order(Err([
226-
PrintOnDrop("Dropped first"),
227-
PrintOnDrop("Dropped last"),
234+
// Here we match the second subpattern, and the drops still happen
235+
// according to the declaration order in the first subpattern.
236+
or_pattern_drop_order(Err([
237+
PrintOnDrop("Declared last, dropped first"),
238+
PrintOnDrop("Declared first, dropped last"),
228239
]));
229240
```
230241

0 commit comments

Comments
 (0)