当我在 RefCell<> 上内联借用时 Rust 恐慌

问题描述

当我在函数中运行以下行时,Rust 会发生恐慌。 X 是 &Tree,Tree 是 Rc>>。 TreeNode 是一个结构体。

x.borrow_mut().parent.as_ref().unwrap().borrow_mut().left = Option::from(y.as_ref().unwrap().clone());

我尝试将borrow_mut() 更改为borrow() 并将第二个保留为borrow_mut() 但错误消息相同。

错误信息:

thread 'main' panicked at 'already borrowed: BorrowMutError'

整个功能:


    fn left_rotate(x: &Tree){
        let mut y = x.borrow().right.clone();
        x.borrow_mut().right = y.as_ref().unwrap().borrow().left.clone();
        if y.as_ref().unwrap().borrow().left.is_some(){
            y.as_ref().unwrap().borrow_mut().left.as_ref().unwrap().borrow_mut().parent = Some(x.clone());
        }
        y.as_ref().unwrap().borrow_mut().parent = x.borrow().parent.clone();
        if x.borrow().parent.is_none(){
            //*self = Option::from(y.clone());
        }else{
            if x.borrow().key == x.borrow().parent.as_ref().unwrap().borrow().left.as_ref().unwrap().borrow().key{
                x.borrow_mut().parent.as_ref().unwrap().borrow_mut().left = Option::from(y.as_ref().unwrap().clone());
            }else{
                x.borrow_mut().parent.as_ref().unwrap().borrow_mut().right = Option::from(y.as_ref().unwrap().clone());
            }
        }
        y.as_ref().unwrap().borrow_mut().left = Option::from(x.clone());
        x.borrow_mut().parent = Option::from(y.as_ref().unwrap().clone());
    }

#[derive(Clone,Debug,PartialEq)]
enum NodeColor {
    Red,Black,}

type Tree = Rc<RefCell<TreeNode<u32>>>;

type RedBlackTree= Option<Tree>;

struct TreeNode<T> {
    pub color: NodeColor,pub key: T,pub parent: RedBlackTree,left: RedBlackTree,right: RedBlackTree,}

Reproducible code

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)