Это:
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);