diff --git a/src/expressions/range-expr.md b/src/expressions/range-expr.md index 282f3adae..00db2d989 100644 --- a/src/expressions/range-expr.md +++ b/src/expressions/range-expr.md @@ -1,7 +1,35 @@ # Range expressions +> **Syntax** +> _RangeExpression_ : +>       _RangeExpr_ +>    | _RangeFromExpr_ +>    | _RangeToExpr_ +>    | _RangeFullExpr_ +> +> _RangeExpr_ : +>    [_Expression_] `..` [_Expression_] +> +> _RangeFromExpr_ : +>    [_Expression_] `..` +> +> _RangeToExpr_ : +>    `..` [_Expression_] +> +> _RangeFullExpr_ : +>    `..` + The `..` operator will construct an object of one of the `std::ops::Range` (or -`core::ops::Range`) variants. +`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] | - | + +Examples: ```rust 1..2; // std::ops::Range @@ -18,3 +46,18 @@ 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.html + +[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