From c69d04480176e99f7f14ebe6bb67ad58289031b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Br=C3=A1ulio=20Bezerra?= Date: Sat, 14 Oct 2017 13:51:49 -0300 Subject: [PATCH] Range expressions grammar --- src/expressions/range-expr.md | 45 ++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) 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