在 Rust 中,loop 关键字用于创建一个无限循环,直到显式地使用 break
语句退出。与其他语言的循环不同,Rust 的 loop 可以返回值,这使得它在处理重复任务时非常灵活。
基本语法
loop循环的语法非常简单:
loop {
/* 代码块 */
}
它会一直执行循环体内的代码,除非你显示的使用了break关键字跳出循环。
fn main() {
loop {
println!("hello world!");
}
}
这段代码将无限循环的打印hello world,直到你按下Ctrl + C终止程序运行;
使用 break 和 continue 控制循环
在 loop 循环中,break 用于立即退出循环,而
continue 用于跳过当前迭代的剩余部分,直接进入下一次迭代。
fn main() {
let mut num = 0;
loop {
num += 1;
if num % 2 == 0 {
continue; // 跳过偶数
}
println!("奇数: {}", num);
if num >= 7 {
break; // 当 num 达到 7 时退出循环
}
}
}
程序输出
奇数: 1 奇数: 3 奇数: 5 奇数: 7
loop 的返回值
Rust 的 loop 循环可以返回一个值,这是通过 break
语句后跟一个表达式实现的。返回值会被赋给循环外部的变量。这在需要从循环中提取结果时非常有用。
例如,反复验证用户的输入,直到输入了一个合法的数字:
fn main() {
let number: i32 = loop {
let mut input = String::new();
println!("请输入一个整数:");
std::io::stdin()
.read_line(&mut input)
.expect("读取输入失败");
let input = input.trim();
let parsed = input.parse();
if parsed.is_ok(){
break parsed.unwrap(); // 返回数字
}
println!("你输入的 '{}' 不是一个整数",input);
};
println!("你输入了一个数字:{}", number);
}
程序运行效果
请输入一个整数: abc 你输入的 'abc' 不是一个整数 请输入一个整数: 3.14 你输入的 '3.14' 不是一个整数 请输入一个整数: 123 你输入了一个数字:123
loop 循环标签
循环标签用于嵌套循环中精确控制跳出哪个循环,避免只能跳出最内层循环的限制。
'标签名: loop {
// ...
break '标签名; // 跳出指定的循环
continue '标签名; // 跳到外层循环的下一次迭代
}
有返回值的用法:
break '标签名 返回值;
跳出外层循环的示例:
'outer: loop {
println!("外层循环开始");
loop {
println!(" 内层循环");
break 'outer; // 直接跳出外层循环
}
println!("这行永远不会执行");
}