Как переназначить массив через изменяемую ссылку в функции - PullRequest
1 голос
/ 07 ноября 2019

Я новичок в Rust, и у меня возникли проблемы с концепцией ссылок и владения. Я хочу просто переназначить массив, но у меня возникают ошибки. Я пробовал следующее:

fn change(a: &mut [i64; 3]) {
    a = [5, 4, 1];
}

, но я получаю следующую ошибку:

 --> main.rs:6:7
  |
6 |   a = [5, 4, 1];
  |       ^^^^^^^^^
  |       |
  |       expected mutable reference, found array of 3 elements
  |       help: consider mutably borrowing here: `&mut [5, 4, 1]`
  |
  = note: expected type `&mut [i64; 3]`

Я пытался добавить &mut в массив, но я получаю полностьюновая ошибка. Может ли кто-нибудь указать мне правильное направление?

1 Ответ

5 голосов
/ 07 ноября 2019

Переменная a является изменяемой ссылкой на массив. Если вы пишете a = ...;, вы пытаетесь изменить саму ссылку (т. Е. Впоследствии a ссылается на другой массив). Но это не то, что вы хотите. Вы хотите изменить исходное значение за ссылкой. Для этого вам нужно разыменовать ссылку с помощью *:

*a = [5, 4, 1];

Сообщение об ошибке для Rust 1.38 и новее еще лучше:

error[E0308]: mismatched types
 --> src/lib.rs:2:9
  |
2 |     a = [5, 4, 1];
  |         ^^^^^^^^^ expected mutable reference, found array of 3 elements
  |
  = note: expected type `&mut [i64; 3]`
             found type `[{integer}; 3]`
help: consider dereferencing here to assign to the mutable borrowed piece of memory
  |
2 |     *a = [5, 4, 1];
  |     ^^

Это уже говорит вам решение! Чтение полного сообщения об ошибке действительно стоит того, чтобы использовать Rust:)

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