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