Skip to content

Commit 76ed5db

Browse files
Update with slice pattern restrictions
1 parent da75d92 commit 76ed5db

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

src/patterns.md

+17-5
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
>    | [_IdentifierPattern_]\
1111
>    | [_WildcardPattern_]\
1212
>    | [_RestPattern_]\
13-
>    | [_ObsoleteRangePattern_]\
1413
>    | [_ReferencePattern_]\
1514
>    | [_StructPattern_]\
1615
>    | [_TupleStructPattern_]\
@@ -401,7 +400,14 @@ match tuple {
401400

402401
> **<sup>Syntax</sup>**\
403402
> _RangePattern_ :\
404-
> &nbsp;&nbsp; &nbsp;&nbsp; _RangePatternBound_ `..=` _RangePatternBound_\
403+
> &nbsp;&nbsp; &nbsp;&nbsp; _InclusiveRangePattern_\
404+
> &nbsp;&nbsp; | _HalfOpenRangePattern_\
405+
> &nbsp;&nbsp; | _ObsoleteRangePattern_
406+
>
407+
> _InclusiveRangePattern_ :\
408+
> &nbsp;&nbsp; &nbsp;&nbsp; _RangePatternBound_ `..=` _RangePatternBound_
409+
>
410+
> _HalfOpenRangePattern_ :\
405411
> &nbsp;&nbsp; | _RangePatternBound_ `..`
406412
>
407413
> _ObsoleteRangePattern_ :\
@@ -421,12 +427,14 @@ it matches all the values between and including both of its bounds. A range patt
421427
half-open is written with a lower bound but not an upper bound, and matches any value equal to
422428
or greater than the specified lower bound.
423429

424-
For example, a pattern `'m'..='p'` will match only the values `'m'`, `'n'`, `'o'`, and `'p'`. The
430+
For example, a pattern `'m'..='p'` will match only the values `'m'`, `'n'`, `'o'`, and `'p'`. For an integer the
425431
pattern `1..` will match 9, or 9001, or 9007199254740991 (if it is of an appropriate size), but
426-
not 0 or negative numbers for signed integers. The bounds can be literals or paths that point
432+
not 0, and not negative numbers for signed integers. The bounds can be literals or paths that point
427433
to constant values.
428434

429-
A pattern a `..=` b must always have a &le; b. It is an error to have a range pattern
435+
A half-open range pattern in the style `a..` cannot be used to match within the context of a slice.
436+
437+
A pattern `a..=b` must always have a &le; b. It is an error to have a range pattern
430438
`10..=0`, for example.
431439

432440
The `...` syntax is kept for backwards compatibility.
@@ -734,6 +742,10 @@ is irrefutable. When matching a slice, it is irrefutable only in the form with
734742
a single `..` [rest pattern](#rest-patterns) or [identifier
735743
pattern](#identifier-patterns) with the `..` rest pattern as a subpattern.
736744

745+
Within a slice, a half-open range pattern like `a..` must be enclosed in parentheses,
746+
as in `(a..)`, to clarify it is intended to match a single value.
747+
A future version of Rust may give the non-parenthesized version an alternate meaning.
748+
737749
## Path patterns
738750

739751
> **<sup>Syntax</sup>**\

0 commit comments

Comments
 (0)