MST

星途 面试题库

面试题:Rust RefCell借用规则在复杂数据结构中的体现

考虑以下包含RefCell的自定义数据结构: ```rust use std::cell::RefCell; struct Inner { value: i32 } struct Outer { inner: RefCell<Inner> } impl Outer { fn new() -> Outer { Outer { inner: RefCell::new(Inner { value: 0 }) } } fn update(&self) { // 在这里尝试对Inner的value进行修改,代码应该怎么写,同时说明为什么这样写符合RefCell的借用规则 } } ```
41.0万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

update方法中,要修改Innervalue,代码如下:

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离开作用域,释放可变借用,其他代码就可以再次获取借用进行操作。