我正在尝试跟进 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
按值(value),所以它需要
拿self.next
恰好是 Option<&Node<T>>
类型按值(value)。那不会“窃取”值(value)吗?
既然闭包是一个变异的闭包,它不应该需要完全访问 self
吗?这段代码不应该编译?我在这里错过了什么吗?
最佳答案
Wouldn't that "steal" the value?
会的,除了Option<&T>
是可复制的。因此 self
保留一份和map
得到另一个。
need complete access to
self
由于值被复制到 map
中, 与 self
中的那个没有联系.因此 self
中的值可以在封闭物内更换。
关于reference - 为什么 Option::map 不在 Iterator::next 的链表实现中取得所有权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47961805/