Да!
Левая часть for
является шаблоном.
Для этого вам нужно три шаблона:
&pat
как у вас уже есть, потому что вы получаете ссылки при итерации.
mut name
, который создает изменяемую привязку. В настоящее время вы используете шаблон name
, который создает неизменную привязку, возможно, самый простой из шаблонов!
(pat)
, где скобки могут использоваться для устранения неоднозначности подшаблонов.
Шаблоны могут быть объединены вместе, что даст:
for &(mut i) in &[1, 2, 3, 4, 5] {
i += 1;
println!("{}", i);
}
( Постоянная ссылка на игровую площадку )
Скобки необходимы для устранения неоднозначности с другим шаблоном &mut pat
, что означает привязку изменяемой ссылки, которая не совпадает.
Однако я бы не сказал, что это очень распространено, и более распространенным способом было бы сделать это два шага:
for &i in &[1, 2, 3, 4, 5] {
let i = i + 1;
println!("{}", i);
}
или
for &i in &[1, 2, 3, 4, 5] {
let mut i = i; // rebind as mutable
i += 1;
println!("{}", i);
}