范围表达式
语法
RangeExpression :
RangeExpr
| RangeFromExpr
| RangeToExpr
| RangeFullExpr
| RangeInclusiveExpr
| RangeToInclusiveExprRangeFromExpr :
表达式..
RangeToExpr :
..
表达式RangeFullExpr :
..
RangeInclusiveExpr :
表达式..=
表达式RangeToInclusiveExpr :
..=
表达式
..
和 ..=
运算符将根据下表构造 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 |
示例
#![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); } }