File tree Expand file tree Collapse file tree 1 file changed +32
-0
lines changed Expand file tree Collapse file tree 1 file changed +32
-0
lines changed Original file line number Diff line number Diff line change @@ -89,4 +89,36 @@ let must_be_one = loop {
89
89
}
90
90
}; // must_be_one 的值应当为 1
91
91
// 如果你发现程序没有结束,请多等一会
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
+ }
92
124
```
You can’t perform that action at this time.
0 commit comments