Keyword for

source ·
Expand description

使用 in 进行迭代,使用 impl更高等级的 trait bounds (for<'a>) 实现 trait。

for 关键字在许多语法位置中使用:

  • for 用于 for-in 循环 (见下文)。
  • impl Trait for Type 中实现 traits 时使用 for (有关更多信息,请参见 impl)。
  • for 也与 for<'a> &'a T: PartialEq<i32> 一样用于 高级 trait 限定

for-in 循环,或更确切地说,是迭代器循环,是 Rust 中一种常见实践上的简单语法糖,它遍历所有实现 IntoIterator 的对象,直到 .into_iter() 返回的迭代器返回 None (或循环体使用 break)。

for i in 0..5 {
    println!("{}", i * 2);
}

for i in std::iter::repeat(5) {
    println!("turns out {i} never stops being 5");
    break; // 否则将永远循环
}

'outer: for x in 5..50 {
    for y in 0..10 {
        if x == y {
            break 'outer;
        }
    }
}
Run

如上面的示例所示,可以使用与生命周期相似的语法 (仅在视觉上相似,实际上完全不同) 来标记 for 循环 (以及所有其他循环)。给 break 提供相同的标记会中断标记的循环,这对于内部循环很有用。 绝对不是 goto。

for 循环如下图所示展开:

for loop_variable in iterator {
    code()
}
Run
{
    let result = match IntoIterator::into_iter(iterator) {
        mut iter => loop {
            match iter.next() {
                None => break,
                Some(loop_variable) => { code(); },
            };
        },
    };
    result
}
Run

有关所显示功能的更多详细信息,请参见 IntoIterator 文档。

有关 for 循环的更多信息,请参见 Rust 书Reference

另请参见 loopwhile