Простой способ проверить тип что-то, чтобы присвоить его неправильный тип:
let _:() = a;
В этом случае значение является «неотъемлемой переменной», или целое по значению. Он не изменен (как показывает тестирование с a += 1
).
Это потому, что вы используете синтаксис деструктурирования. Вы шаблон соответствия вашей &mut 5
против &mut _
, так же, как если бы вы написали
match &mut 5 { &mut a => {
// rest of code
} };
Таким образом, вы добавляете изменяемую ссылку и немедленно разыменования его.
Чтобы связать изменяемую ссылку на значение вместо этого, вы можете сделать
let ref mut a = 5;
Это полезно в деструктуризации принимать ссылки на несколько внутренних ценностей.
Спасибо! Я забыл о возможности использования деструктивного синтаксиса в let bindings –