diff --git a/src/patterns.md b/src/patterns.md index 9a3a79ccac..837fcfa504 100644 --- a/src/patterns.md +++ b/src/patterns.md @@ -10,6 +10,7 @@ >    | [_StructPattern_]\ >    | [_TupleStructPattern_]\ >    | [_TuplePattern_]\ +>    | [_GroupedPattern_]\ >    | [_SlicePattern_]\ >    | [_PathPattern_] @@ -582,6 +583,25 @@ They are also used to [destructure](#destructuring) a tuple. This pattern is refutable when one of its subpatterns is refutable. +## Grouped patterns + +> **Syntax**\ +> _GroupedPattern_ :\ +>    `(` [_Pattern_] `)` + +Enclosing a pattern in parentheses can be used to explicitly control the +precedence of compound patterns. For example, a reference pattern next to a +range pattern such as `&0..=5` is ambiguous and is not allowed, but can be +expressed with parentheses. + +```rust +let int_reference = &3; +match int_reference { + &(0..=5) => (), + _ => (), +} +``` + ## Slice patterns > **Syntax**\ @@ -633,17 +653,18 @@ Path patterns are irrefutable when they refer to structs or an enum variant when has only one variant or a constant whose type is irrefutable. They are refutable when they refer to refutable constants or enum variants for enums with multiple variants. -[_Pattern_]: #patterns +[_GroupedPattern_]: #grouped-patterns +[_IdentifierPattern_]: #identifier-patterns [_LiteralPattern_]: #literal-patterns -[_WildcardPattern_]: #wildcard-pattern +[_PathPattern_]: #path-patterns +[_Pattern_]: #patterns [_RangePattern_]: #range-patterns [_ReferencePattern_]: #reference-patterns -[_IdentifierPattern_]: #identifier-patterns -[_TupleStructPattern_]: #tuple-struct-patterns +[_SlicePattern_]: #slice-patterns [_StructPattern_]: #struct-patterns [_TuplePattern_]: #tuple-patterns -[_SlicePattern_]: #slice-patterns -[_PathPattern_]: #path-patterns +[_TupleStructPattern_]: #tuple-struct-patterns +[_WildcardPattern_]: #wildcard-pattern [`Copy`]: special-types-and-traits.html#copy [IDENTIFIER]: identifiers.html