1

我想更改类型为 的方法中的结构成员值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如果我将另一个包裹在里面Rc并克隆它也无济于事。据我了解, Rc 中的 Option 仍然位于指针后面,那么为什么首先要移动它呢?unwrap()需要所有权吗?

4

0 回答 0