나는 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