Rust中break跳出带标签外层循环时如何返回值
Rust 带标签循环break是否支持返回值
答案是完全支持,语法和普通无标签循环的break返回值规则一致,只需要在标签后紧跟要返回的值即可,整个带标签的循环会作为表达式把这个值返回出来。
基础用法回顾
普通loop循环中,可以直接在break后携带返回值,循环的执行结果可以直接赋值给变量,示例:
fn main() { let mut counter = 0; let result = loop { counter += 1; if counter == 10 { break counter * 2; } }; println!("The result is {result}"); }
这段代码运行后会输出The result is 20,循环在counter到10时跳出,把计算结果返回给了result变量。
带标签break返回值的写法
跳出带标签的外层循环时,只需要把要返回的值写在标签名后面即可,不需要额外语法。针对示例代码,修改后就可以实现跳出外层循环同时返回值:
fn main() { let mut count = 0; // 把带标签的循环整体作为表达式赋值给变量接收返回值 let outer_result = 'counting_up: loop { println!("count = {count}"); let mut remaining = 10; loop { println!("remaining = {remaining}"); if remaining == 9 { break; } if count == 2 { // 跳出外层'counting_up循环,同时返回count * 100作为循环表达式的值 break 'counting_up count * 100; } remaining -= 1; } count += 1; }; println!("End count = {count}, returned value from outer loop = {outer_result}"); }
运行这段代码,执行到count == 2时会直接终止两层循环,最终输出:End count = 2, returned value from outer loop = 200。
注意事项
- 同一个循环(无论是否带标签)中,所有指向它的
break返回的值类型必须完全一致,否则会触发编译错误。 - 只有
loop无限循环支持break携带返回值,for循环和while循环不支持该特性。
内容的提问来源于stack exchange,提问作者Amr Salama
相关产品推荐
相关产品推荐

