首页 > 解决方案 > Rust 中的 Arc 中的临时生命周期

问题描述

我正在努力理解 Rust 中的临时生命周期概念。

假设我在该Arc字段中有以下结构:

struct MyStruct {
    arc_field: Arc<Mutex<i32>>,
}

当我尝试从它的克隆访问内部 i32 字段时,arc_field它抱怨

这里的临时价值下降了,但仍然是借来的

这是我尝试检索它的方式:

let my_field = my_struct.arc_field.clone().lock().unwrap();

为什么我需要使用 let 绑定来增加它的生命周期?

这里是游乐场

标签: rustlifetime

解决方案


clone返回一个不存储在变量中的新实例。所以它是一个临时值。您必须将副本存储在变量中以使其成为非临时变量:

let my_field = my_struct.arc_field.clone(); // You have a non temporary lifetime
let my_field = my_field.lock().unwrap();

您不能直接使用克隆值,因为lock借用它,并且借用不能超过该值。


推荐阅读