问题描述
我想在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 (将#修改为@)