0
私はRust With Entirely Too Many Linked Listsをフォローしようとしています。Option :: mapがIterator :: nextのリンクリストの実装で所有権を取得しないのはなぜですか?
type Link<T> = Option<Box<Node<T>>>;
pub struct List<T> {
head: Link<T>,
}
struct Node<T> {
elem: T,
next: Link<T>,
}
pub struct Iter<T> {
next: Option<&Node<T>>,
}
値によってタイプOption<&Node<T>>
であることを起こるself.next
を取ることが必要になるので、implementing a iter
が、next
方法において
impl<'a, T> Iterator for Iter<'a, T> {
type Item = &'a T;
fn next(&mut self) -> Option<Self::Item> {
self.next.map(|node| {
self.next = node.next.as_ref().map(|node| &**node);
&node.elem
})
}
}
は、map
値によってOption
をとります。それは価値を「盗む」だろうか?
閉鎖が変異一つであるため、それはself
への完全なアクセスを必要はありませんし、このコードはコンパイルしないでしょうか?私はここに何かを逃していますか
お読みください。あなたが見ているコードの全目的は、とにかく*表示されるかもしれない多くのエラーを提示することです。貼り付けたコードはコンパイルされません。 – Shepmaster