Подтвердить что ты не робот

Пусть & mut синтаксис

В Rust можно сделать следующее связывание:

let &mut a = &mut 5;

Но что это значит? Например, let a = &mut 5 создает неизменяемое связывание типа &mut i32, let mut a = &mut 5 создает изменяемое связывание типа &mut i32. Что насчет let &mut?

4b9b3361

Ответ 1

Простым способом проверки типа чего-то является присвоение ему неправильного типа:

let _: () = a;

В этом случае значение является "интегральной переменной" или целочисленным значением. Он не изменен (как показывает тестирование с помощью a += 1).

Это связано с тем, что вы используете синтаксис деструктурирования. Вы являетесь шаблоном, сопоставляющим ваш &mut 5 с &mut _, как если бы вы написали

match &mut 5 { &mut a => {
// rest of code
} };

Таким образом, вы добавляете изменяемую ссылку и немедленно разыгрываете ее.

Чтобы привязать изменчивую ссылку к значению, вы можете сделать

let ref mut a = 5;

Это полезно для деструктурирования, чтобы ссылаться на несколько внутренних значений.