我想实现一个特征,为此功能之一将迭代器作为参数,然后对该迭代器返回的值作为不可变引用进行操作。
但是,我也希望我的函数也可以在值的迭代器上工作(而不必重复代码)。我怎样才能做到这一点?
以下内容不起作用:
impl<T, I: Iterator> FilterItem for SortedFilter<I> where T: Ord, I::Item: Borrow<T> {
...
}
我懂了
error: the type parameter `T` is not constrained by the impl trait, self type, or predicates
最佳答案
您正在寻找 Borrow
特性:
use std::borrow::Borrow;
fn print_it<I, T>(iter: I)
where I: Iterator<Item = T>,
T: Borrow<u8>
{
for v in iter {
let a: &u8 = v.borrow();
println!("{}", a);
}
}
fn main() {
let vals = vec![1,2,3];
print_it(vals.iter()); // Iterator of references
print_it(vals.into_iter()); // Iterator of values
}