并且错误中的可变/不可变单词不相关
我不知道你为什么这么想。可变性是very在 Rust 中很重要!例如,虽然允许您同时对不可变数据进行多个引用,但一次只允许对可变数据进行单个引用。
首先,您需要修复parent
:
let mut parent = // ...
然后,您将从该行收到错误:
parent.child.use_parent(&mut parent);
当你运行这一行时,你就隐式可变地借用了parent
and child
。这样做是为了让您可以调用use_parent
,这需要一个&mut self
.
然而,你是also试图获取第二个可变引用作为参数!这是一个禁忌,因为如果你被允许拥有多个aliasing可变引用,编译器将无法跟踪它并确保您不会破坏内存安全保证。
假设我删除该行self.dummy+=1;
所以只有 1 个可变别名 - 我可以让它工作吗?
让我们看看函数签名的一些变体
fn use_parent(&self, parent: &mut Parent)
// cannot borrow `parent` as mutable because `parent.child` is also borrowed as immutable
fn use_parent(&mut self, parent: &Parent)
// cannot borrow `parent` as immutable because `parent.child` is also borrowed as mutable
fn use_parent(&self, parent: &Parent)
// OK
正如我之前提到的,如果您对某物有可变引用,则不允许您拥有any对同一事物的其他引用(可变或不变)。
另外,请注意没关系方法的主体是什么! Rust 只检查被调用函数的签名来验证借用某些东西是否安全。
那么你如何尝试解决你的问题呢?最终,您正在尝试做一些编译器很难证明安全的事情。你想要一个graph的可变链接。我强烈建议阅读Rc 的模块文档其中有一个正是这种父子关系的例子。