Как обновить значение в VecDeque - PullRequest
0 голосов
/ 29 июня 2019

Я хочу сохранить значение в VecDeque, а затем обновить его.

Минимальный пример:

use std::collections::VecDeque;

fn main() {
    let mut v = VecDeque::new();
    let mut str1 = String::from("Hello");

    v.push_back(str1);

    let str = String::from(" World");
    str1.push_str(&str);
}

Ошибка:

   Compiling playground v0.0.1 (/playground)
error[E0382]: borrow of moved value: `str1`
  --> src/main.rs:10:5
   |
5  |     let mut str1 = String::from("Hello");
   |         -------- move occurs because `str1` has type `std::string::String`, which does not implement the `Copy` trait
6  |     
7  |     v.push_back(str1);
   |                 ---- value moved here
...
10 |     str1.push_str(&str);
   |     ^^^^ value borrowed here after move

error: aborting due to previous error

Вопрос:

Как я могу добавить элемент в коллекцию и после этого обновить этот элемент?

Ответы [ 2 ]

1 голос
/ 29 июня 2019

Использование back_mut

v.back_mut().unwrap().push_str(&str);

или просто сохранить ссылку в деке

v.push_back(&mut str1);
0 голосов
/ 29 июня 2019

Мой рабочий пример:

use std::collections::VecDeque;

fn main() {
    let mut v = VecDeque::new();
    let mut str1 = String::from("Hello");
    v.push_back(str1);

    let mut str2 = String::from(" World");

    match v.back_mut() {
        Some(value) => value.push_str(&str2),
        None => println!("Error")
    }

    match v.back() {
        Some(value) => println!("{}", value),
        None => println!("Error2")
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...