基本

Rust 中有 4 個迴圈結構。以下所有示例都會產生相同的輸出。

無限迴圈

let mut x = 0;
loop {
    if x > 3 { break; }
    println!("{}", x);
    x += 1;
}

迴圈時

let mut x = 0;
while x <= 3 {
    println!("{}", x);
    x += 1;
}

另見: loopwhile true 有什麼區別?

模式匹配的迴圈

為簡潔起見,這些有時被稱為 while let 迴圈。

let mut x = Some(0);
while let Some(v) = x {
    println!("{}", v);
    x = if v < 3 { Some(v + 1) }
        else     { None };
}

這相當於 loop 塊內的 match

let mut x = Some(0);
loop {
    match x {
        Some(v) => {
            println!("{}", v);
            x = if v < 3 { Some(v + 1) }
                else     { None };
        }
        _       => break,
    }
}

對於迴圈

在 Rust 中,for 迴圈只能與可迭代物件一起使用(即它應該實現 IntoIterator )。

for x in 0..4 {
    println!("{}", x);
}

這相當於涉及 while let 的以下程式碼段:

let mut iter = (0..4).into_iter();
while let Some(v) = iter.next() {
    println!("{}", v);
}

注意: 0..4 返回一個 Range 物件 ,該物件已經實現了 Iterator 特徵 。因此, into_iter()是不必要的,但僅僅是為了說明 for 的作用。如需深入瞭解,請參閱 for Loops 和 IntoIterator的官方文件。

另見: 迭代器