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

如何返回引用局部变量的不可修改结构体?

问题:返回持有局部变量引用的外部结构体实例

我有一个来自外部 crate 的结构体Data,无法修改它,这个结构体持有一个可变数组的引用。现在我想返回该结构体的实例,但做不到——因为它引用了局部变量。我试过用Rc<RefCell<>>、Box等方式,都没法把data和bytes的生命周期绑定在一起。Rust会在函数退出时销毁bytes,这和返回的data显然冲突。

我找到的大多数同类问题的解决方案要么是修改Data(这不可能),要么是大幅重构周边代码,因为提问者都没搞清楚核心问题。

唯一真正解决问题的方案是Stack Overflow上的一个回答,我花了很大功夫才找到并确认它能解决我的问题。

代码示例

// 这段代码无法修改!
pub struct Data<'a> {
    data: &'a mut [u8],
}

// 这段代码无法修改!
impl Data<'_> {
    fn do_it(&mut self) {
        self.data[20] = 23;
    }
}

// 这段代码由我编写:
fn test<'a>() -> Data<'a> {
    let mut bytes: Vec<u8> = vec!(0; 128);
    let mut data = Data {
        data: &mut bytes
    };
    data.do_it();

    /*
    下面这行代码必然报错:
     data: &mut bytes
           ---------- `bytes` 在这里被借用

     data
     ^^^^ 返回了一个引用当前函数拥有的数据的值
    */
    data
}

内容的提问来源于stack exchange,提问作者Jan Diederich

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 16:25:06