Временная жизнь в Arc in Rust - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь понять концепцию временного времени жизни в Rust.

Допустим, у меня есть следующая структура с полем Arc:

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

Когда я пытаюсь получить доступ к внутреннему i32поле внутри клона arc_field, в котором он жалуется на

Временное значение, упавшее здесь, пока еще заимствованное

Вот как я пытаюсь получить его:

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

Почему мне нужно использовать let привязку, чтобы увеличить срок его службы?

Здесь детская площадка

1 Ответ

0 голосов
/ 28 января 2019

clone возвращает новый экземпляр, который вы не храните внутри переменной.Так что это временная ценность.Вы должны хранить свою копию внутри переменной, чтобы сделать ее не временной:

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

Вы не можете напрямую использовать клонированное значение, потому что lock заимствует его, а заимствование не может пережить значение.

...