基本

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的官方文档。

另见: 迭代器