Rust-reference/expressions/range-expr

来自菜鸟教程
跳转至:导航、​搜索

Range expressions

区间表达式

range-expr.md

commit: 1cc592ee270b4d9ad190a8cacce0a1ed356b54d0
本章译文最后维护日期:2020-11-13

句法

RangeExpression :
      RangeExpr
   | RangeFromExpr
   | RangeToExpr
   | RangeFullExpr
   | RangeInclusiveExpr
   | RangeToInclusiveExpr

RangeExpr :
   Expression .. Expression

RangeFromExpr :
   Expression ..

RangeToExpr :
   .. Expression

RangeFullExpr :
   ..

RangeInclusiveExpr :
   Expression ..= Expression

RangeToInclusiveExpr :
   ..= Expression

....= 操作符会根据下表中的规则构造 std::ops::Range(或 core::ops::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

举例:

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

下面的表达式是等价的。

let x = std::ops::Range {start: 0, end: 10};
let y = 0..10;

assert_eq!(x, y);

区间能在 for循环里使用:

for i in 1..11 {
    println!("{}", i);
}