有谁知道 Rust 是否提供某种包装迭代器?例如:
let data = vec!(1, 2, 3, 4, 5);
let mut it = data.into_iter();
let mut wrapped = some_wrapping_iter(it); // wrap it
wrapped.take(2).for_each(|e| process_first_2_elems(e));
it = wrapped.into(); // and get back the original
it.for_each(|e| process_remaining(e));
Run Code Online (Sandbox Code Playgroud)
by_ref可以使用辅助方法来完成此任务。此方法强制借用迭代器而不是使用它,这是有效的,因为标准库中有一个全面的实现impl<I> Iterator for &mut I where I: Iterator。
let data = vec!(1, 2, 3, 4, 5);
let mut it = data.into_iter();
it.by_ref().take(2).for_each(|e| process_first_2_elems(e));
it.for_each(|e| process_remaining(e));
Run Code Online (Sandbox Code Playgroud)
您还可以通过自己获取独家参考来实现此目的(by_ref只会使其更符合人体工程学 - 在幕后它只是获取参考):
(&mut it).take(2).for_each(|e| process_first_2_elems(e));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |