函数接受
dyn IntoIterator<blah>
对象很有用,它允许您使用 into_iter()
,但这需要获取集合的所有权。
Rust 似乎缺少
iter()
方法的特性。 itertools
板条箱之类的东西可以替代吗?
是否有可重置/可重启迭代器的特征?
是否有一些替代功能:
我想我可以接受
Iterator<Item=T>+Clone
,但这有点难看(我必须在第一次使用它之前使用迭代器)。
我应该添加我的实际目标:我想制作一堆可以将
&[T]
或 &IndexSet<T>
(来自 indexmap 板条箱)作为参数的函数。
需要取得收藏品的所有权
不不不,如果物品可以参考:
fn main() {
let a = vec![1, 2, 3];
do_it_twice_by_ref(&a);
dbg!(a);
}
fn do_it_twice_by_ref<'a>(it: impl IntoIterator<Item = &'a u8> + Copy) {
for i in it {
dbg!(i);
}
for i in it {
dbg!(i);
}
}
之所以可行,是因为通常还有一个
impl IntoIterator for &Collection
(在这里查看 IndexSet
),而 iter
方法通常是根据它来实现的。
Copy
在共享参考文献中免费提供。