Skip to main content
A grouped pattern in Rust consists of a pattern enclosed in parentheses to explicitly control parsing precedence. It matches identically to the inner pattern it encloses, serving solely to disambiguate complex pattern combinations during syntactic analysis, particularly those involving the alternation operator (|), identifier binding (@), or reference patterns (& and &mut).

Syntax

Mechanics and Precedence

In Rust’s pattern matching grammar, certain operators have lower precedence than others. The grouped pattern forces the compiler’s parser to evaluate the enclosed pattern as a single, atomic unit before applying surrounding pattern operators. A grouped pattern delegates all matching, destructuring, and variable binding semantics directly to its inner pattern. It does not introduce new types, nor does it change the memory layout of the matched value.

Alternation and Binding

The most common structural conflict occurs between the subpattern binding operator (@) and the alternation operator (|). The | operator has lower precedence than @.

Reference Patterns

Grouped patterns are also used to control the application of reference semantics (& or &mut) when combined with alternation. Note that binding modes like ref and mut apply exclusively to identifier patterns and cannot be applied to grouped patterns. Attempting to use a binding mode on a grouped pattern (e.g., ref (x | y)) results in a syntax error.

Grouped Patterns vs. Tuple Patterns

A critical syntactic distinction in Rust is the difference between a grouped pattern and a single-element tuple pattern. The parser differentiates them based on the presence of a trailing comma.
  • ( PATTERN ): A grouped pattern. Modifies precedence. Matches the exact type of the inner pattern.
  • ( PATTERN , ): A tuple pattern of arity 1. Matches a 1-tuple (e.g., (i32,)).
Tired of Poor Rust Skills? Fix That With Deep Grasping!Learn More