我在Rust工作,我在让所有权制度为我工作方面遇到了一些麻烦。当child
创建parent
时,我想为parent
child
提供引用。下面是我试图开始工作的代码:
struct Child<'a> {
parent: &'a Parent,
}
impl<'a> Child<'a> {
fn new(parent: &Parent) -> Child {
Child { parent: &parent }
}
}
struct Parent {
child_count: u32,
}
impl Parent {
fn new() -> Parent {
Parent { child_count: 0 }
}
fn makeChild(&mut self) -> Child {
self.child_count += 1;
Child::new(&self)
}
}
fn main() {
let mut parent = Parent::new();
let child = parent.makeChild();
}
但是,我一直收到以下错误:
src/main.rs:20:17: 20:21 error: `self` does not live long enough
src/main.rs:20 Child::new(&self)
答案 0 :(得分:2)
self
已经是一个引用,因为你将函数的参数声明为&mut self
,因此你不需要引用它 - 只需直接使用self
。
impl Parent {
fn new() -> Parent {
Parent { child_count: 0 }
}
fn makeChild(&mut self) -> Child {
self.child_count += 1;
Child::new(self)
}
}