Как мне решить упражнение Растлинга "move_semantics3.rs"? - PullRequest
0 голосов
/ 22 мая 2018

Я выполняю упражнения Шатание , и есть упражнение "move_semantics3.rs":

// move_semantics3.rs
// Make me compile without adding new lines-- just changing existing lines!
// (no lines with multiple semicolons necessary!)
// Scroll down for hints :)

pub fn main() {
    let vec0 = Vec::new();

    let mut vec1 = fill_vec(vec0);

    println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);

    vec1.push(88);

    println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);

}

fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
    vec.push(22);
    vec.push(44);
    vec.push(66);

    vec
}

Подсказка говорит:

Разницамежду этим и предыдущими находится то, что первой строки fn fill_vec, в которой было let mut vec = vec;, больше нет.Вы можете вместо добавления этой строки добавить mut в одном месте, которое изменит существующую привязку на изменяемую, а не на неизменяемую:)

Я понятия не имею, какисправьте этот код, добавив только один mut.

1 Ответ

0 голосов
/ 22 мая 2018

Если вы копируете / вставляете код в игровую площадку, компилятор жалуется:

error[E0596]: cannot borrow immutable argument `vec` as mutable
  --> src/main.rs:20:5
   |
19 | fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
   |             --- consider changing this to `mut vec`
20 |     vec.push(22);
   |     ^^^ cannot borrow mutably

Компилятор говорит все: вы должны заменить vec на mut vec, потому что по умолчанию в переменной Rust нетизменяемые.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...