14-区间表达式

区间表达式 — The Rust Reference

译文 · 基于 The Rust Reference

原文链接: https://doc.rust-lang.org/reference/expressions/range-expr.html

r[expr.range]

区间表达式

r[expr.range.syntax]

RangeExpression ->
      RangeExpr
    | RangeFromExpr
    | RangeToExpr
    | RangeFullExpr
    | RangeInclusiveExpr
    | RangeToInclusiveExpr

RangeExpr -> Expression `..` Expression

RangeFromExpr -> Expression `..`

RangeToExpr -> `..` Expression

RangeFullExpr -> `..`

RangeInclusiveExpr -> Expression `..=` Expression

RangeToInclusiveExpr -> `..=` Expression

r[expr.range.behavior] .. 和 ..= 运算符会根据下表构造 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
3
4
5
6
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

r[expr.range.equivalence] 下列表达式等价。

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

assert_eq!(x, y);

r[expr.range.for] 区间可用于 for 循环:

1
2
3
for i in 1..11 {
    println!("{}", i);
}
最后修改 August 21, 2026: 更新 (76fc81a2e)