为什么以下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<_>`
根据我的理解,这应该编译,因为there is:
impl<T> IntoIterator for Vec<T>
答案 0 :(得分:0)
在this page的开头,您可以阅读:
此结构是通过Vec上的into_iter方法创建的
我不确定您想要什么,但是编译器可以接受。
let yy: &dyn std::iter::IntoIterator<
Item = i32,
IntoIter = std::vec::IntoIter<i32>,
> = &std::vec::Vec::new().into_iter();