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

最佳答案

是的!
for的左侧部分是一个模式。

为此,需要三种模式:

已有的

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

  • 模式可以组合在一起,从而得到:
    for &(mut i) in &[1, 2, 3, 4, 5] {
        i += 1;
        println!("{}", i);
    }
    

    (Permalink to the playground)

    括号对于与另一个模式&mut pat进行歧义是必要的,这意味着绑定(bind)可变引用,这是不一样的。

    但是,我不会说这很常见,更常见的方法是执行以下两个步骤:
    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);
    }
    

    关于rust - 在Rust中使用本地可变副本迭代数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56798930/

    10-16 17:16