Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 带锈电弧中的临时寿命_Rust_Lifetime - Fatal编程技术网

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

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

假设我有以下带有
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
借用了数据。我将在回答中添加这一点。为什么要克隆
?我想在线程之间使用弧,因此我克隆弧并将其发送到衍生线程。为什么要克隆
?我想在线程之间使用弧,因此我克隆弧并将其发送到衍生线程。