и как его исправить?
                  
                  
                  
                  
                  
                  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
Поле типа итератор это бич раста. Нормально такое не пишется
Только через трейт обжекты
Ну понятно, но простой вариант через трейт обжекты, лучше так перефразирую, да
Обсуждают сегодня