使用std :: iter :: IntoIterator的代码不起作用

时间:2020-09-05 21:53:58

标签: 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<_>`

根据我的理解,这应该编译,因为there is

impl<T> IntoIterator for Vec<T>

1 个答案:

答案 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();