我是Rust的初学者,在文档中找不到与此有关的任何内容。将不胜感激。 C ++中的以下循环
for (const int i : {1,2,3,4,5})
cout << i;
大致翻译为
for &i in &[1,2,3,4,5] {
println!("{}", i);
}
有没有办法写出等价
for (int i : {1,2,3,4,5}) {
i += 1;
cout << i;
}
简而言之,在Rust中?也就是说,是否有一个捷径可以对要迭代的内容进行本地可变复制?
答案 0 :(得分:5)
是的!
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);
}