2015-07-08 4 views
11

Можно сделать следующее связывание в Русте:Пусть & мут синтаксис

let &mut a = &mut 5; 

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

ответ

10

Простой способ проверить тип что-то, чтобы присвоить его неправильный тип:

let _:() = a; 

В этом случае значение является «неотъемлемой переменной», или целое по значению. Он не изменен (как показывает тестирование с a += 1).

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

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

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

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

let ref mut a = 5; 

Это полезно в деструктуризации принимать ссылки на несколько внутренних ценностей.

+0

Спасибо! Я забыл о возможности использования деструктивного синтаксиса в let bindings –

Смежные вопросы