и как его исправить?
struct Abc<I>
where I: Iterator<Item=u64> {
my_iter: I,
}
impl<I> Abc<I>
where I: Iterator<Item=u64> {
fn func1(&mut self) {
self.my_iter = vec![1,2,3,4,5].into_iter();
}
}
компилятор ругается вот так:
error[E0308]: mismatched types
--> src/abc.rs:16:24
|
12 | impl<I> Abc<I>
| - this type parameter
...
16 | self.my_iter = vec![1,2,3,4,5].into_iter();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected type parameter `I`, found struct `std::vec::IntoIter`
|
= note: expected type parameter `I`
found struct `std::vec::IntoIter<{integer}>`
По-моему, компилятор считает, что [1,2,3,4,5] - это тип integer, а не unsigned, как определено в структуре
У self.my_iter есть какой-то тип I, а ты в него скармливаешь (почти) конкретный тип итератора. Компилятор удивляется
Если поставить i64, то ошибка та же.
Идея следующая: у структуры есть поле типа итератор. В какой-то момент мы хотим внутри какого-то метода присвоить этому полю новое значение. Как это правильно записать на Rust? cc @Vatneek
Поле типа итератор это бич раста. Нормально такое не пишется
Только через трейт обжекты
Ну понятно, но простой вариант через трейт обжекты, лучше так перефразирую, да
Обсуждают сегодня