"克隆"迭代器适配器如何与"迭代器"配合使用<T>?

  • 本文关键字:迭代器 适配器 克隆 rust
  • 更新时间 :
  • 英文 :


为什么以下代码在Cloned期望DoubleEndedIterator<Item=&'a T>iter()返回Iterator<T>(而不是期望的Iterator<&T>)时有效?

use std::clone::Clone;
use std::iter::{Rev, Cloned};
use std::fmt::Debug;
fn reversed<'a, U, T>(iter: U) -> Rev<Cloned<U>>
    where U: DoubleEndedIterator<Item=&'a T>,
          T: 'a + Clone + Debug
{
    iter.cloned().rev()
}
fn main() {
    let v0 = (0..10).collect::<Vec<u32>>();
    let mut v0r = v0.clone();
    v0r.reverse();
    assert_eq!(v0r, reversed(v0.iter()).collect::<Vec<_>>());
}

T是泛型参数,它有一个应用范围。具体而言,std::slice::IterT参数与在reversed上声明的T不同。如果不是这样的话,我认为人类基本上不可能使用仿制药。这就像每个名为name的变量都引用了相同的东西!

但是CCD_ 12返回CCD_

这不是真的;您当前无法返回特征。您只能返回实现特征的类型。此外,std::slice::Iter<T>通过返回对T:的引用来实现Iterator

impl<'a, T> Iterator for Iter<'a, T> {
    type Item = &'a T
 }

最新更新