You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中如何复制Rc<RefCell<SomeStruct>>内部的SomeStruct值

错误原因

你当前代码无法编译的核心逻辑是:Rc<RefCell<T>> 属于共享所有权智能指针组合,内部的值可能被多个所有者共同持有,Rust不允许你直接将值从RefCell中移动走,否则其他所有者会访问到无效数据。
你调用borrow_mut()得到的是RefMut<T>借用守卫,对它解引用只能拿到T的可变借用,无法直接获取所有权。

正确实现方案

首先需要为SomeStruct实现Clone trait,之后修改代码如下:

impl GameTree {
    pub fn new(rc_status: Rc<RefCell<SomeStruct>>) -> GameTree {
        // 先获取内部值的不可变借用,调用clone复制出完全独立的SomeStruct实例
        let status: SomeStruct = rc_status.borrow().clone();
        let root = Node::new(status);
        GameTree { root }
    }
}

补充说明

  • 如果你的SomeStruct的所有字段都支持按位复制,你可以为它实现Copy trait,此时直接写let status: SomeStruct = *rc_status.borrow();就可以直接拷贝出独立实例,不需要显式调用clone。
  • 你只是需要读取内部值做复制,不需要用borrow_mut获取可变借用,用不可变的borrow即可,可以避免不必要的独占锁,降低和其他地方的借用发生冲突的概率。

内容的提问来源于stack exchange,提问作者Emilio Filippi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 22:06:03