在Rust中使用本地可变副本迭代数组

时间:2019-06-27 22:01:02

标签: rust

我是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中?也就是说,是否有一个捷径可以对要迭代的内容进行本地可变复制?

1 个答案:

答案 0 :(得分:5)

是的!

for的左侧是一个模式。

您需要三种模式:

  • &pat,因为您在迭代时会获得引用。
  • mut name创建一个可变的绑定。您当前正在使用name模式,该模式创建不可变的绑定,可以说是最简单的模式!
  • (pat),其中括号可用于消除子模式的歧义。

模式可以组合在一起,从而得到:

for &(mut i) in &[1, 2, 3, 4, 5] {
    i += 1;
    println!("{}", i);
}

Permalink to the playground

括号必须与另一个模式&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);
}