范围表达式

语法

RangeExpression :

      RangeExpr

   | RangeFromExpr

   | RangeToExpr

   | RangeFullExpr

   | RangeInclusiveExpr

   | RangeToInclusiveExpr

RangeExpr :

   表达式 .. 表达式

RangeFromExpr :

   表达式 ..

RangeToExpr :

   .. 表达式

RangeFullExpr :

   ..

RangeInclusiveExpr :

   表达式 ..= 表达式

RangeToInclusiveExpr :

   ..= 表达式

....= 运算符将根据下表构造 std::ops::Range(或 core::ops::Range)变体之一的对象

生成式语法类型范围
RangeExprstart..endstd::ops::Rangestart ≤ x < end
RangeFromExprstart..std::ops::RangeFromstart ≤ x
RangeToExpr..endstd::ops::RangeTox < end
RangeFullExpr..std::ops::RangeFull-
RangeInclusiveExprstart..=endstd::ops::RangeInclusivestart ≤ x ≤ end
RangeToInclusiveExpr..=endstd::ops::RangeToInclusivex ≤ end

示例

#![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
}

以下表达式是等效的。

#![allow(unused)]
fn main() {
let x = std::ops::Range {start: 0, end: 10};
let y = 0..10;

assert_eq!(x, y);
}

范围可以在 for 循环中使用

#![allow(unused)]
fn main() {
for i in 1..11 {
    println!("{}", i);
}
}