Rust语法中有loop循环,并且提供了循环标签和消除歧义,《Rust编程语言设计》中是这么说的:
循环标签:在多个循环之间消除歧义
如果存在嵌套循环,break 和 continue 应用于此时最内层的循环。你可以选择在一个循环上指定一个 循环标签(loop label),然后将标签与 break 或 continue 一起使用,使这些关键字应用于已标记的循环而不是最内层的循环。
使用方式是单引号+标签名+冒号+loop ...
,如'counting_up
,可以通过break +标签名
来跳出标签的loop。
fn main() {
let mut count = 0;
println!("count = {count}");
'counting_up: loop{
let mut remaining = 10;
loop {
println!("remaining = {remaining}");
if remaining == 6 {
break;
}
if count == 5 {
break 'counting_up;
}
remaining -= 1;
}
count += 1;
}
println!("count end.");
}
运行结果是:
> cargo run
Compiling loop_test v0.1.0 (D:\Code\Rust\loop_test)
Finished dev [unoptimized + debuginfo] target(s) in 0.36s
Running `target\debug\loop_test.exe`
count = 0
remaining = 10
remaining = 9
remaining = 8
remaining = 7
remaining = 6
remaining = 10
remaining = 9
remaining = 8
remaining = 7
remaining = 6
remaining = 10
remaining = 9
remaining = 8
remaining = 7
remaining = 6
remaining = 10
remaining = 9
remaining = 8
remaining = 7
remaining = 6
remaining = 10
remaining = 9
remaining = 8
remaining = 7
remaining = 6
remaining = 10
count end.
是不是有些像goto,但是没goto那样自由到问题很多。