#rust #iterator
#Ржавчина #итератор
Вопрос:
Почему следующий код Rust не компилируется?
let yy: dyn std::iter::IntoIterator<Item = i32, IntoIter = std::vec::IntoIter<i32>> =
std::vec::Vec::new();
error[E0308]: mismatched types
--> src/main.rs:30:9
|
29 | let yy: dyn std::iter::IntoIterator<Item = i32, IntoIter = std::vec::IntoIter<i32>> =
| --------------------------------------------------------------------------- expected due to this
30 | std::vec::Vec::new();
| ^^^^^^^^^^^^^^^^^^^^ expected trait object `dyn std::iter::IntoIterator`, found struct `std::vec::Vec`
|
= note: expected trait object `dyn std::iter::IntoIterator<IntoIter = std::vec::IntoIter<i32>, Item = i32>`
found struct `std::vec::Vec<_>`
Соответственно, насколько я понимаю, это должно скомпилироваться, потому что есть:
impl<T> IntoIterator for Vec<T>
Комментарии:
1. Чтобы создать объект trait, вам нужно было бы использовать
Box
как в этих примерах .
Ответ №1:
В начале этой страницы вы можете прочитать:
Эта структура создается методом into_iter в Vec
Я не знаю точно, чего вы хотите, но это может быть принято компилятором.
let yy: amp;dyn std::iter::IntoIterator<
Item = i32,
IntoIter = std::vec::IntoIter<i32>,
> = amp;std::vec::Vec::new().into_iter();