我正在尝试跟随Rust With Entirely Too Many Linked Lists。
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>>,
}
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
})
}
}
在next
方法中,map
按Option
取值,因此需要
按值self.next
取Option<&Node<T>>
类型self
。难道不会“偷”价值吗?
由于闭包是一个变异的,它不应该需要完全访问fileOperations([fileCopyOperation(excludes: '', flattenFiles: false, includes: "videos\\*.MTS", targetLocation: "H:\\home\\Videos")])
并且这段代码不应该编译吗?我在这里错过了什么吗?
答案 0 :(得分:1)
不会&#34;窃取&#34;价值?
除了Option<&T>
是可复制的外,它会。因此self
保留一份副本,map
保留另一份副本。
需要完全访问
self
由于该值已复制到map
,因此与self
中的值无关。因此self
中的值可以在闭包内替换。