Rust 带锈电弧中的临时寿命
我正在努力理解Rust中的临时寿命概念 假设我有以下带有Rust 带锈电弧中的临时寿命,rust,lifetime,Rust,Lifetime,我正在努力理解Rust中的临时寿命概念 假设我有以下带有Arc字段的结构: struct MyStruct { arc_field: Arc<Mutex<i32>>, } 为什么我需要使用let绑定来增加它的生命周期 这里是clone返回一个不存储在变量中的新实例。所以它是一个临时值。必须将副本存储在变量中,使其成为非临时变量: let my_field = my_struct.arc_field.clone(); // You have a non tempo
Arc
字段的结构:
struct MyStruct {
arc_field: Arc<Mutex<i32>>,
}
为什么我需要使用let绑定来增加它的生命周期
这里是
clone
返回一个不存储在变量中的新实例。所以它是一个临时值。必须将副本存储在变量中,使其成为非临时变量:
let my_field = my_struct.arc_field.clone(); // You have a non temporary lifetime
let my_field = my_field.lock().unwrap();
无法直接使用克隆的值,因为
lock
借用了克隆的值,并且借用的值不能超过克隆的值。clone
返回一个未存储在变量中的新实例。所以它是一个临时值。必须将副本存储在变量中,使其成为非临时变量:
let my_field = my_struct.arc_field.clone(); // You have a non temporary lifetime
let my_field = my_field.lock().unwrap();
不能直接使用克隆值,因为
lock
借用了克隆值,并且借用值不能超过克隆值。我知道我可以通过将克隆存储到另一个变量来处理克隆值,该变量会将生存期从临时增加到范围,但为什么我真的需要它?我的意思是,我将克隆作为临时的,为什么不能从临时克隆值调用lock()@AkinerAlkan,因为lock
借用了数据。我将在我的答案中添加这一点。我知道我可以通过将克隆存储到另一个变量来处理它,这会将生存期从临时增加到范围,但为什么我真的需要它呢?我的意思是,我将克隆作为临时的,为什么不能从临时克隆值调用lock()@AkinerAlkan,因为lock
借用了数据。我将在回答中添加这一点。为什么要克隆弧
?我想在线程之间使用弧,因此我克隆弧并将其发送到衍生线程。为什么要克隆弧
?我想在线程之间使用弧,因此我克隆弧并将其发送到衍生线程。