我想更改类型为 的方法中的结构成员值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()
需要所有权吗?