Range expressions
Syntax
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:
#![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 }
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); }
Ranges can be used in for
loops:
#![allow(unused)] fn main() { for i in 1..11 { println!("{}", i); } }