循环拥有生命周期是什么意思?

9

我在查看一些Rust代码时看到了类似于以下内容的东西:

'running: loop {
    // insert code here
    if(/* some condition */) {
        break 'running;
    }
}

什么是在循环中“标记”生命周期?仅使用以下内容有什么好处和区别:
```rust for item in list { // code here } ```
loop {
    // insert code here
    if(/* some condition */) {
        break;
    }
}

1
https://dev59.com/SWAh5IYBdhLWcg3wBfeM 提供了什么见解吗? - MB-F
1个回答

15

循环标签

在编程过程中,你可能会遇到嵌套循环的情况并且需要指定 break 或 continue 语句是应用于哪个循环。与大多数其他编程语言一样,Rust 中的 break 或 continue 语句默认只影响最内层的循环。如果想要跳出或继续外层循环中的某次迭代,可以使用标签来显式地指定。

在下面的示例中,当 x 是偶数时,我们继续执行外部循环的下一次迭代,而当 y 是偶数时,我们继续执行内部循环的下一次迭代。因此,只有当 x 和 y 都为奇数时才执行 println!。

'outer: for x in 0..10 {
    'inner: for y in 0..10 {
        if x % 2 == 0 { continue 'outer; } // Continues the loop over `x`.
        if y % 2 == 0 { continue 'inner; } // Continues the loop over `y`.
        println!("x: {}, y: {}", x, y);
    }
}

5
啊,有道理。设计语言的人为什么选择使用相同的生命周期语法呢?这似乎没有必要增加混淆。 :/ - Griffort
8
可能部分原因是(除了'static之外),生命周期可以被视为作用域标签。它们通常以某种方式与实际的词法作用域相关联,并像作用域一样嵌套。这也避免了可能存在的重叠或与类型指定语法冲突的情况;两者本来是不相关的,但可能会有些视觉上的混淆。 - DK.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接