#iterator #traits #repeat #iteration #loops #impl

no-std for_each_repeat

Iterator::for_each 可以重复当前迭代

1 个不稳定版本

0.1.3 2022年1月27日
0.1.2 2022年1月27日
0.1.1 2022年1月27日
0.1.0 2022年1月27日

#1567Rust 模式

自定义许可

11KB
188

for_each_repeat

你是否曾经遇到过编写 for 循环时...

fn foo(mut iter: impl Iterator<Item=i32>) {
    for i in iter {
        // do something...
        if i == 42 {
            // ughh
        }
    }
}

...需要在一些情况下重复当前迭代的情况?
你可能想:"哦,天哪,我需要 思考 如何将这个重写为 while 循环!"

别担心!因为我们有

重复

导入 for_each_repeat::ForEachRepeat 并将你的 for 循环体放入一个闭包中,该闭包必须返回 LoopControl 类型。使用 Repeat,你可以使用相同的迭代器值重新执行当前迭代。

use for_each_repeat::{ForEachRepeat, LoopControl};

fn foo(mut iter: impl Iterator<Item=i32>) {
    let _: Option<()> = iter.for_each_repeat(|i| {
        // do something...
        if i == 42 {
            // process it...
            return LoopControl::Repeat(i);
        }
        LoopControl::Continue(())
    });
}

#![no_std]

这个 crate 可以在 no_std 环境中使用。

无运行时依赖