r[expr.range]
Range expressions
r[expr.range.syntax]
RangeExpression ->
RangeExpr
| RangeFromExpr
| RangeToExpr
| RangeFullExpr
| RangeInclusiveExpr
| RangeToInclusiveExpr
RangeExpr -> Expression `..` Expression
RangeFromExpr -> Expression `..`
RangeToExpr -> `..` Expression
RangeFullExpr -> `..`
RangeInclusiveExpr -> Expression `..=` Expression
RangeToInclusiveExpr -> `..=` Expression
r[expr.range.behavior]
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:
#![allow(unused)] fn main() { 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 }
r[expr.range.equivalence] The following expressions are equivalent.
#![allow(unused)] fn main() { let x = std::ops::Range {start: 0, end: 10}; let y = 0..10; assert_eq!(x, y); }
r[expr.range.for]
Ranges can be used in for loops:
#![allow(unused)] fn main() { for i in 1..11 { println!("{}", i); } }