Не может заимствовать неизменяемое заимствованное содержимое как изменяемое при реализации двоичного дерева с помощью Rc
Я хочу реализовать двоичное дерево. Мой основной язык - C ++, поэтому код, вероятно, не идиоматический Rust, а компилирует следующий код:
use std::rc::Rc;
struct Node {
left: Option<Rc<Node>>,
right: Option<Rc<Node>>,
data: String,
}
impl Node {
fn new(_data: String) -> Node {
Node {
data : _data.clone(),
left : None,
right : None,
}
}
fn insert_left(&mut self, mut node: &Rc<Node>) {
self.left = Some(node.clone());
}
fn insert_right(&mut self, mut node: &Rc<Node>) {
self.left = Some(node.clone());
}
}
fn main() {
let mut root = Rc::new(Node::new(String::from("root")));
let mut left = Rc::new(Node::new(String::from("left")));
root.insert_left(&left);
}
У меня ошибка компиляции:
error: cannot borrow immutable borrowed content as mutable
--> so.rs:31:9
|
31 | root.insert_left(&left);
| ^^^^
error: aborting due to previous error
Я не могу понять, что здесь не так. После нескольких повторений ошибок я обнаружил, что проблема заключается вinsert_left()
функция: еслиself
- это неизменяемая ссылка, затем она компилируется с закомментированным контентом, но неизменная ссылка не позволяет моему достичь цели.