0
Cloned
がDoubleEndedIterator<Item=&'a T>
を期待しているのにiter()
がIterator<T>
(期待どおりIterator<&T>
の代わりに)を返すと、次のコードが機能するのはなぜですか?`Iterator <T>`で `Cloned`イテレータアダプタはどのように動作しますか?
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<_>>());
}
「のstd具体的には、Tパラメータ::スライスを::イーターが逆転で宣言さTと異なっている」これは一般的なケースでは、おそらく真実である 両者の間にリンクがないとき、私は 'DoubleEndedIterator- 'の 'Item =& 'a T'がこれらの別々の' T 'をリンクしているという印象を受けました。 お返事いただきありがとうございます。第2部が私の質問にお答えします。 –