面试题答案
一键面试在update
方法中,要修改Inner
的value
,代码如下:
impl Outer {
fn new() -> Outer {
Outer { inner: RefCell::new(Inner { value: 0 }) }
}
fn update(&self) {
let mut inner = self.inner.borrow_mut();
inner.value += 1;
}
}
这样写符合RefCell
的借用规则是因为RefCell
允许在运行时检查借用规则。borrow_mut
方法获取一个可变借用,由于RefCell
内部使用引用计数和运行时检查,在调用borrow_mut
时,如果没有其他活动的不可变或可变引用,就会成功获取可变引用,允许修改内部数据。在修改完成后,inner
离开作用域,释放可变借用,其他代码就可以再次获取借用进行操作。