Как сделать неизменяемые переменные, указывающие изменяемые данные в Rust - PullRequest
0 голосов
/ 09 июля 2020
• 1000 1002 *

кажется, что mut допускает изменчивость на обоих уровнях

1 Ответ

7 голосов
/ 10 июля 2020

Это:

let mut a = Vec::new()

не создает ссылку на вектор; скорее он создает переменную, привязанную к самому вектору. Это эквивалентно этому в C ++:

std::vector<int> a;

Если вам нужна неизменяемая ссылка на изменяемый вектор, у вас будет что-то вроде этого:

let mut a = vec![1,2,3];

let r = &mut a;
r.push(4);

В приведенном выше фрагменте r - неизменяемая переменная, привязанная к ссылке на изменяемый вектор a. Если вы попытаетесь повторно назначить r ссылку на другой вектор:

let mut b = vec![4,5,6];

r=&mut b;
r.push(7);

, вы получите следующую ошибку:

9 |     r=&mut b;
  |     ^^^^^^^^ cannot assign twice to immutable variable

Playground

Однако обратите внимание, что из-за того, что Rust допускает затенение, вы можете использовать 'let' для создания новой привязки, которая затеняет старую в той же области видимости, поэтому вы можете сделать это:

let mut a = vec![1, 2, 3];

let r = &mut a;
r.push(4);

let mut b = vec![4, 5, 6];
let r = &mut b;
r.push(7);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...