Rust 有三种循环:loop、while 和 for。

loop

loop 是最简单的循环,这是一个无限循环:

loop {println!("Loop forever!");
}

while

while 循环和其他编程语言的 while 循环类似:

let mut x = 5; // mut x: i32
let mut done = false; // mut done: bool

while !done {
    x += x - 3;

    println!("{}", x);

    if x % 5 == 0 {
        done = true;
    }
}

for

for x in 0..10 {
    println!("{}", x); // x: i32
}

for 循环的代码结构是这样的:

for var in expression {
    code
}

expression 是一个迭代器,迭代器返回一系列值,每次循环返回的值赋给 var。0..10 是一个迭代器表达式,返回 0-9 的十个数字。

枚举

通过. enumerate() 可以获取当前循环的次数:

在区间范围(range)中:

for (i,j) in (5..10).enumerate() {
    println!("i = {} and j = {}", i, j);
}

输出:

i = 0 and j = 5
i = 1 and j = 6
i = 2 and j = 7
i = 3 and j = 8
i = 4 and j = 9

在迭代器中:

for (linenumber, line) in lines.enumerate() {
    println!("{}: {}", linenumber, line);
}

输出:

0: Content of line one
1: Content of line two
2: Content of line three
3: Content of line four

提前结束迭代

看看 while 循环如何提前结束迭代:

let mut x = 5;
let mut done = false;

while !done {
    x += x - 3;

    println!("{}", x);

    if x % 5 == 0 {
        done = true;
    }
}

还可以用 break 和 continue 来结束循环,break 是退出循环,continue 是结束此次循环进入下次循环:

let mut x = 5;

loop {
    x += x - 3;

    println!("{}", x);

    if x % 5 == 0 { break; }
}

循环标签

对于嵌套的循环,可以使用标签,明确 break 和 continue 处理的是哪个循环,如:

'outer: for x in 0..10 {'inner: for y in 0..10 {
        if x % 2 == 0 { continue 'outer; } // continues the loop over x
        if y % 2 == 0 { continue 'inner; } // continues the loop over y
        println!("x: {}, y: {}", x, y);
    }
}