Keyword break

source ·
Expand description

从循环中提前退出。

遇到 break 时,将立即终止关联循环体的执行。

let mut last = 0;

for x in 1..100 {
    if x > 12 {
        break;
    }
    last = x;
}

assert_eq!(last, 12);
println!("{last}");
Run

break 表达式通常与包围 break 的最里面的循环相关联,但是可以使用标签来指定哪个包围循环受到影响。

'outer: for i in 1..=5 {
    println!("outer iteration (i): {i}");

    '_inner: for j in 1..=200 {
        println!("    inner iteration (j): {j}");
        if j >= 3 {
            // 从内循环中断,让外循环继续。
            break;
        }
        if i >= 2 {
            // 从外部循环中断,并直接到达 "Bye"。
            break 'outer;
        }
    }
}
println!("Bye.");
Run

loop 关联时,可以使用 break 表达式从该循环返回一个值。 这仅对 loop 有效,对其他任何类型的循环均无效。 如果未指定任何值,则 break; 返回 ()。 循环中的每个 break 必须返回相同的类型。

let (mut a, mut b) = (1, 1);
let result = loop {
    if b > 10 {
        break b;
    }
    let c = a + b;
    a = b;
    b = c;
};
// 斐波纳契数列中第一个超过 10 的数字:
assert_eq!(result, 13);
println!("{result}");
Run

有关更多详细信息,请参阅 有关 “break 表达式”有关 “break 和循环值” 的参考资料。