範圍(Range)表達式

Rust支持範圍操作符,有以下幾種表示範圍的操作符:

範圍表達式類型表示的範圍
start..endstd::ops::Rangestart ≤ x < end
start..std::ops::RangeFromstart ≤ x
..endstd::ops::RangeTox < end
..std::ops::RangeFull-
start..=endstd::ops::RangeInclusivestart ≤ x ≤ end
..=endstd::ops::RangeToInclusivex ≤ end

例如,1..5表示1、2、3、4共四個整數,1..=5表示1、2、3、4、5共五個整數。

需注意的是其中表示全範圍的表達式..,它表示可以儘可能地生成下一個數,直到無法生成為止。

在生成Slice的時候,需要使用到範圍表達式。例如,從數組生成Slice:


#![allow(unused)]
fn main() {
let arr = [11, 22, 33, 44, 55];
let s1 = &arr[0..3];    // [11,22,33]
let s2 = &arr[1..=3];   // [22, 33, 44]
let s3 = &arr[..];      // [11, 22, 33, 44, 55]
}

範圍表達式也常被用於迭代操作。例如for語句:


#![allow(unused)]
fn main() {
for i in 1..5 {
  println!("{}", i);  // 1 2 3 4
}
}

另外,範圍表達式和對應類型的實例是等價的。例如,下面兩個表示範圍的方式是等價的:


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