Skip to content

Commit 5fbe582

Browse files
committed
feat(rust): Add content about loop label in control
1 parent edffafd commit 5fbe582

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

docs/languages/rust/control.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,4 +89,36 @@ let must_be_one = loop {
8989
}
9090
}; // must_be_one 的值应当为 1
9191
// 如果你发现程序没有结束,请多等一会
92+
```
93+
94+
### 循环标签
95+
96+
如果存在嵌套循环,`break``continue` 都只作用于此时最内层的循环。在Rust中,你可以为特定循环指定 循环标签(loop label),然后将标签与 break 或 continue 一起使用,使这些关键字作用于所标记的循环,实现跳出多重循环的目的。
97+
98+
在有这个特性之前,「跳出多重循环」其实颇为棘手——因为最优雅的方式是声名狼藉的"goto"。虽然「把循环封装在一个函数内用return跳出」是个好办法,但并不总适合这样做。
99+
100+
```rust
101+
let matrix = vec![
102+
vec![1, 2, 3],
103+
vec![4, 5, 6],
104+
vec![7, 8, 9]
105+
];
106+
107+
let target = 5;
108+
let mut found = false;
109+
110+
'outer: for row in &matrix { // 将循环标签放在循环前面. 格式为 'label
111+
for &num in row {
112+
if num == target {
113+
found = true;
114+
break 'outer; // 使用循环标签直接跳出外层循环
115+
}
116+
}
117+
}
118+
119+
if found {
120+
println!("找到了目标元素!");
121+
} else {
122+
println!("未找到目标元素。");
123+
}
92124
```

0 commit comments

Comments
 (0)