在Rust中访问Rc的Option内的结构成员

问题描述

我想在Rc<RefCell<Option<_>>类型的方法内更改结构成员值。 可以说我有这个结构:

struct TestStruct {
    pub vecfield: Rc<RefCell<Vec<i32>>>,}

impl TestStruct {
    fn set_vec(&self) {
       self.vecfield.as_ref().borrow_mut().append(&mut vec![2,3]);
    }
}


fn main() {
    let x = TestStruct { vecfield: Rc::new(RefCell::new(vec![1])) };
    x.set_vec();
    println!("{:?}",x.vecfield);
}

RefCell { value: [1,2,3] }

到目前为止,太好了。 现在,我想将Vector包装在一个Option中(或RefCell无关紧要),并且该方法始终尝试移动Option。

impl TestStruct {
    fn set_vec(&self) {
       //will not compile
       self.vecfield.as_ref().borrow_mut().unwrap().append(&mut vec![2,3]);
    }
}
fn main() {
    let x = TestStruct { vecfield: Rc::new(RefCell::new(Some(vec![1]))) };
    x.set_vec();
    println!("{:?}",x.vecfield);
}

我现在如何可变地访问方法内部的Vector?我尝试调用into_inner()as_ref(),但是仍然出现错误提示我无法在方法内移动Option。如果将Option包裹在另一个Rc中并克隆它也无济于事。 根据我的理解,Rc中的Option仍在指针后面,为什么首先移动它? unwrap()是否需要所有权?

解决方法

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

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

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