Ответ 1
mut foo: T
означает, что у вас есть переменная с именем foo
, которая является T
. Вам разрешено изменять переменную на:
let mut val1 = 2;
val1 = 3; // OK
let val2 = 2;
val2 = 3; // error: re-assignment of immutable variable
Это также позволяет вам изменять поля структуры, которые у вас есть:
struct Monster { health: u8 }
let mut orc = Monster { health: 93 };
orc.health -= 54;
let goblin = Monster { health: 28 };
goblin.health += 10; // error: cannot assign to immutable field
foo: &mut T
означает, что у вас есть переменная, которая ссылается на (&
) значение, и вам разрешено изменять (mut
) указанное значение (включая поля, если это структура):
let val1 = &mut 2;
*val1 = 3; // OK
let val2 = &2;
*val2 = 3; // error: cannot assign to immutable borrowed content
Обратите внимание, что &mut
имеет смысл только с ссылкой - foo: mut T
является недопустимым синтаксисом. Вы также можете объединить два квалификатора (let mut a: &mut T
), когда это имеет смысл.