在Rust中,循环是一种控制结构,它允许你重复执行一段代码直到满足某个条件。Rust提供了几种循环机制:loop
、while
和 for
。
1. loop
循环
loop
是最简单的循环形式,它会一直执行代码块,直到被显式地中断。
fn main() {
let mut count = 0;
loop {
println!("计数器: {}", count);
count += 1;
if count == 5 {
break; // 当计数器达到5时,退出循环
}
}
}
在这个例子中,loop
会一直执行,每次迭代增加 count
的值,并在 count
达到5时使用 break
语句退出循环。
2. while
循环
while
循环在条件为真时执行代码块。
fn main() {
let mut count = 0;
while count < 5 {
println!("计数器: {}", count);
count += 1;
}
}
在这个例子中,while
循环会一直执行,直到 count
不再小于5。
3. for
循环
for
循环用于遍历集合(如数组、范围等)的元素。
fn main() {
for count in 0..5 {
println!("计数器: {}", count);
}
}
在这个例子中,for
循环遍历从0到4的范围,每次迭代将 count
设置为范围的下一个值。
循环的返回值
在Rust中,loop
循环可以作为表达式使用,并且可以返回值。
fn main() {
let result = loop {
println!("再次运行循环");
break 42; // 返回值
};
println!("循环的返回值: {}", result);
}
在这个例子中,loop
循环返回了值 42
,该值被赋给了 result
变量。
continue
在Rust中,continue
关键字用于立即结束当前循环的当前迭代,并开始下一次迭代。当你想要跳过当前循环的剩余部分,但不想完全退出循环时,这非常有用。
下面是一个使用continue
的简单例子,它打印1到10之间的所有奇数:
for number in 1..=10 {
if number % 2 == 0 {
continue; // 如果number是偶数,跳过本次迭代
}
println!("{}", number); // 只打印奇数
}
在这个例子中,continue
语句用于跳过循环中的偶数。当number % 2 == 0
为真时,即number
是偶数时,continue
被执行,println!
语句被跳过,循环直接进入下一次迭代。
你可以在while
循环和for
循环中使用continue
,无论是单层循环还是嵌套循环。这对于根据特定条件控制循环流程非常有用。
break
在Rust中,break
关键字用于立即退出当前所在的循环。当你想要提前结束循环,不再执行任何剩余的迭代时,这非常有用。
下面是一个使用break
的简单例子,它查找1到10之间的第一个能被7整除的数字,并退出循环:
for number in 1..=10 {
if number % 7 == 0 {
println!("The first number divisible by 7 is {}", number);
break; // 一旦找到,退出循环
}
}
在这个例子中,当number % 7 == 0
为真时,即number
能被7整除时,println!
语句被执行,然后break
语句立即退出循环。
break
关键字也可以用于退出while
循环,以及嵌套循环中的外层循环。为了退出外层循环,你可以在break
后跟一个标签(label),这个标签必须放在你想退出的循环之前。例如:
'outer: for i in 1..=3 {
'inner: for j in 1..=3 {
if i == j {
break 'outer; // 退出外层循环
}
println!("i = {}, j = {}", i, j);
}
}
在这个例子中,当i
和j
相等时,break 'outer;
语句会导致程序退出外层循环,而不仅仅是内层循环。标签的使用使得可以精确控制想要退出的循环层级。