Skip to content

Rust - 循环

循环是编程中的一个基本概念,它允许你重复执行一段代码块。Rust 提供了三种强大且安全的循环结构来处理任何迭代需求:loop、while 和惯用的 for。

loop 关键字创建一个无限循环,它会永远运行,直到你使用 break 关键字明确告诉它停止。这对于服务器监听连接或程序等待用户输入等场景非常有用。

fn main() {
let mut counter = 0;
loop {
counter += 1;
println!("Counter is at: {}", counter);
if counter == 5 {
break; // 当 counter 达到 5 时退出循环
}
}
}

小贴士: loop 还可以用于从循环中返回值,方法是将值放在 break 语句之后。这对于重试逻辑非常有用。

fn main() {
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2; // 退出并返回 20
}
};
println!("The result is {}", result); // 打印:结果是 20
}

while 循环在条件为 true 时一直运行。条件在每次迭代开始时检查。

fn main() {
let mut number = 3;
while number != 0 {
println!("{}!", number);
number -= 1;
}
println!("LIFTOFF!!!");
}
3!
2!
1!
LIFTOFF!!!

while 循环虽然有用,但如果条件管理不慎,有时也容易出错。对于遍历集合,Rust 提供了一种更安全、更简洁的替代方案。

for 循环是 Rust 中最常用和最惯用的循环。它用于迭代任何实现了 Iterator trait 的类型,例如数组(arrays)、向量(vectors)或范围(ranges)。它比手动 while 循环更安全、更简洁,因为它为你处理了迭代逻辑,从而防止了常见的差一错误(off-by-one errors)。

fn main() {
let fruits = ["Apple", "Banana", "Cherry"];
for fruit in fruits.iter() { // .iter() 借用每个元素
println!("I like {}s", fruit);
}
}

你也可以遍历一个数字范围。请注意,1..=3 用于表示一个包含末端的范围(inclusive range)。

fn main() {
// 范围 1..4 是不包含末端的(1, 2, 3)
// 范围 1..=3 是包含末端的(1, 2, 3)
for number in 1..=3 {
println!("{}", number);
}
println!("Ready!");
}

如前所述,break 会立即退出当前循环。

continue 关键字跳过当前迭代的剩余部分,并进入下一次迭代。这对于在循环中过滤项目很有用。

fn main() {
for number in 0..10 { // 范围从 0 到 9
if number % 2 == 0 {
continue; // 跳过偶数的 println!
}
println!("Found an odd number: {}", number);
}
}
Found an odd number: 1
Found an odd number: 3
Found an odd number: 5
Found an odd number: 7
Found an odd number: 9