Я пытаюсь переписать переменную в цикле, но я продолжаю работать в cannot assign to `cur_node` because it is borrowed
. Ниже я прокомментировал цикл для простоты, и это та же проблема. Как я могу справиться с этим?Невозможно назначить переменной, потому что она заимствована
fn naive_largest_path(root: Rc<RefCell<Node>>) {
let mut cur_node = root.clone();
let cur_node_borrowed = cur_node.borrow();
// while cur_node_borrowed.has_children() {
let lc = cur_node_borrowed.left_child.as_ref().unwrap();
let left_child = cur_node_borrowed.left_child.as_ref().unwrap();
let right_child = cur_node_borrowed.right_child.as_ref().unwrap();
let left_val = left_child.borrow().value;
let right_val = right_child.borrow().value;
if left_val > right_val {
cur_node = left_child.clone();
} else {
cur_node = right_child.clone();
}
// }
}
struct Node {
value: i32,
row_num: i32,
position_in_row: i32,
left_child: Option<Rc<RefCell<Node>>>,
right_child: Option<Rc<RefCell<Node>>>,
}
impl Node {
fn new(val: i32, row: i32, pos_in_row: i32) -> Rc<RefCell<Node>> {
Rc::new(RefCell::new(Node {
value: val,
row_num: row,
position_in_row: pos_in_row,
left_child: None,
right_child: None,
}))
}
fn has_children(&self) -> bool {
self.left_child.is_some() || self.right_child.is_some()
}
}
Единственное решения переписать код таким образом, что обходит этот вопрос. Еще несколько подробностей о том, что такое «Node» и что вы ожидаете получить в качестве результата этой функции, будет бесценным (отредактируйте их в вопросе). –
Это не будет правильная терминология (в лучшем случае я начинаю работать с ржавчиной), но мне кажется, что ваш 'cur_node_borrowed' владеет собственностью изменчивого заимства' cur_node'. Поэтому, когда вы опускаетесь на дно, вы пытаетесь снова мутировать «cur_node», а «cur_node_borrowed» - в области. Нажатие 'cur_node_borrowed' вне области видимости - таким образом, потерять изменчивый заимствование - должно позволить вам снова назначить cur_node. (Я просто не знаю, как это сделать, извините). Надеюсь, это указывает на то, что вы в правильном направлении. – Ross
@MatthieuM, я добавил свою реализацию Node. Цель состоит в том, чтобы вернуть вектор узлов, основанный на наибольших значениях детей. Я снял его для краткости. – Newtang