Rust 是否存在消耗零开销的迭代器?

Rust 是否存在消耗零开销的迭代器?,rust,Rust,我经常发现自己编写的代码如下: 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没有这个 在迭代器上有一个for_each()操

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

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没有这个

在迭代器上有一个
for_each()
操作,该操作将为迭代器的每个元素执行闭包,并使用它,但还没有任何内容

考虑将
改为
循环:

for x in myvec.iter() {
    some_operation(x);
}
在这种特殊情况下,它看起来确实比迭代器操作更好。

实现了您想要的:

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);
}

我同意,它看起来确实更好,也许这就是为什么现在还没有消费迭代器的原因。这可能会让那些被迭代器蒙蔽的人重新思考他们的特定用例。您的两个示例都使用了
映射
,该映射旨在转换项目。扔掉这个结果意味着整个迭代器都没用了。出于某种原因,我不想再使用For循环了。别问我为什么,也许这个问题相对没用。