| # Range expressions |
| |
| > **<sup>Syntax</sup>**\ |
| > _RangeExpression_ :\ |
| > _RangeExpr_\ |
| > | _RangeFromExpr_\ |
| > | _RangeToExpr_\ |
| > | _RangeFullExpr_\ |
| > | _RangeInclusiveExpr_\ |
| > | _RangeToInclusiveExpr_ |
| > |
| > _RangeExpr_ :\ |
| > [_Expression_] `..` [_Expression_] |
| > |
| > _RangeFromExpr_ :\ |
| > [_Expression_] `..` |
| > |
| > _RangeToExpr_ :\ |
| > `..` [_Expression_] |
| > |
| > _RangeFullExpr_ :\ |
| > `..` |
| > |
| > _RangeInclusiveExpr_ :\ |
| > [_Expression_] `..=` [_Expression_] |
| > |
| > _RangeToInclusiveExpr_ :\ |
| > `..=` [_Expression_] |
| |
| The `..` and `..=` operators will construct an object of one of the `std::ops::Range` (or `core::ops::Range`) variants, according to the following table: |
| |
| | Production | Syntax | Type | Range | |
| |------------------------|---------------|------------------------------|-----------------------| |
| | _RangeExpr_ | start`..`end | [std::ops::Range] | start ≤ x < end | |
| | _RangeFromExpr_ | start`..` | [std::ops::RangeFrom] | start ≤ x | |
| | _RangeToExpr_ | `..`end | [std::ops::RangeTo] | x < end | |
| | _RangeFullExpr_ | `..` | [std::ops::RangeFull] | - | |
| | _RangeInclusiveExpr_ | start`..=`end | [std::ops::RangeInclusive] | start ≤ x ≤ end | |
| | _RangeToInclusiveExpr_ | `..=`end | [std::ops::RangeToInclusive] | x ≤ end | |
| |
| Examples: |
| |
| ```rust |
| 1..2; // std::ops::Range |
| 3..; // std::ops::RangeFrom |
| ..4; // std::ops::RangeTo |
| ..; // std::ops::RangeFull |
| 5..=6; // std::ops::RangeInclusive |
| ..=7; // std::ops::RangeToInclusive |
| ``` |
| |
| The following expressions are equivalent. |
| |
| ```rust |
| let x = std::ops::Range {start: 0, end: 10}; |
| let y = 0..10; |
| |
| assert_eq!(x, y); |
| ``` |
| |
| Ranges can be used in `for` loops: |
| |
| ```rust |
| for i in 1..11 { |
| println!("{}", i); |
| } |
| ``` |
| |
| [_Expression_]: ../expressions.md |
| |
| [std::ops::Range]: https://doc.rust-lang.org/std/ops/struct.Range.html |
| [std::ops::RangeFrom]: https://doc.rust-lang.org/std/ops/struct.RangeFrom.html |
| [std::ops::RangeTo]: https://doc.rust-lang.org/std/ops/struct.RangeTo.html |
| [std::ops::RangeFull]: https://doc.rust-lang.org/std/ops/struct.RangeFull.html |
| [std::ops::RangeInclusive]: https://doc.rust-lang.org/std/ops/struct.RangeInclusive.html |
| [std::ops::RangeToInclusive]: https://doc.rust-lang.org/std/ops/struct.RangeToInclusive.html |