Cloned
DoubleEndedIterator<Item=&'a T>
ancak iter()
Iterator<T>
(beklediği gibi bir Iterator<&T>
yerine) beklediğinde aşağıdaki kod neden çalışıyor?`Cloned` yineleyici bağdaştırıcısı, Iterator <T>` ile çalışır?
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<_>>());
}
"Özellikle, std :: dilim için T parametresi :: Iter T tersine ilan farklıdır" Bu muhtemelen genel durumda doğrudur İkisi arasında bir bağlantı olmadığı zaman, 'DoubleEndedIterator- ' içinde 'Item = & 'a T' ifadesinin bu ayrı' T'leri birbirine bağladığının izlenimi altında kaldım. Neyse, cevabınız için teşekkürler, ikinci kısım sorumu yanıtlıyor. –