Rust in Arc中的临时生命

时间:2019-01-28 12:02:45

标签: rust lifetime

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

假设我的Arc字段具有以下结构:

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

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

  

临时价值在这里仍然借来时下降了

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

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

为什么我需要使用let绑定来延长其寿命?

这里是playground

1 个答案:

答案 0 :(得分:4)

clone返回一个您没有存储在变量中的新实例。因此,这是一个临时值。您必须将副本存储在变量中,以使其非临时性:

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

您不能直接使用克隆的值,因为lock是借来的,借来的值也不会超过该值。