Я определяю черту, которая принимает параметр i: &I
. Я хотел бы использовать это значение i
в цикле for
.Написание реализации общего признака с помощью признака IntoIterator, но только для неизменяемых эталонных разработчиков
Например:
struct Test;
trait Bar<I> {
fn bar(&self, i: &I);
}
impl<T, I: IntoIterator<Item=T>> Bar<I> for Test {
fn bar(&self, i: &I) {
for x in i {
println!("woo!");
}
}
}
fn main() {
let vec = vec!(1, 2, 3);
let test = Test;
test.bar(&vec);
}
Это приводит к ошибке:
<anon>:10:9: 12:10 error: the trait `core::iter::Iterator` is not implemented for the type `&I` [E0277] <anon>:10 for x in i { <anon>:11 println!("woo!"); <anon>:12 } <anon>:10:9: 12:10 help: see the detailed explanation for E0277 <anon>:10:9: 12:10 note: `&I` is not an iterator; maybe try calling `.iter()` or a similar method <anon>:10:9: 12:10 note: required by `core::iter::IntoIterator::into_iter` error: aborting due to previous error playpen: application terminated with error code 101
Я играл вокруг с помощью Deref
признака, чтобы увидеть, если я мог бы получить что-то, чтобы работать , но безрезультатно.
Я бы очень хотел сохранить неизменяемую ссылку в определении функции, поскольку эта черта пытается быть общей для многих типов, а определение других реализаций с использованием Bar<&'a I>
привело к некоторым другим связанным с жизнью проблемам, которые у меня были проблемы с.