是否有零开销消耗迭代器?

Is there a zero-overhead consuming iterator?

我经常发现自己编写如下代码:

myvec.iter().map(|x| some_operation(x)).count()

count 的调用触发了迭代器链的消耗,但也产生了不希望的非单位结果。

我正在寻找类似

的内容
myvec.iter().map(|x| some_operation(x)).consume()

应该等同于

for _ in myvec.iter().map(|x| some_operation(x)) {}

不,Rust 没有这个。

were several discussions and even an RFC 关于对迭代器进行 for_each() 操作,它将为迭代器的每个元素执行一个闭包,消耗它,但目前还没有。

考虑改用 for 循环:

for x in myvec.iter() {
    some_operation(x);
}

在这种特殊情况下,它看起来确实比迭代器操作更好。

Iterator::for_each 为所欲为:

struct Int(i32);

impl Int {
    fn print(&self) {
        println!("{}", self.0)
    }
}

fn main() {
    [Int(1), Int(2), Int(3)].into_iter().for_each(Int::print);
}