我正在努力理解Rust中的临时生命概念。
假设我的Arc
字段具有以下结构:
struct MyStruct {
arc_field: Arc<Mutex<i32>>,
}
当我尝试从arc_field
的克隆中访问内部i32字段时,它抱怨
临时价值在这里仍然借来时下降了
这是我尝试检索它的方式:
let my_field = my_struct.arc_field.clone().lock().unwrap();
为什么我需要使用let绑定来延长其寿命?
这里是playground
答案 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
是借来的,借来的值也不会超过该值。