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

标签 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 中简明扼要?也就是说,是否有一种简写方式可以为正在迭代的内容创建一个本地可变副本?

最佳答案

是的!

for 的左边部分是一个模式。

为此您需要三种模式:

  • &pat 正如您已经拥有的那样,因为您在迭代时获得了引用。
  • mut name 创建可变绑定(bind)。您目前正在使用 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/

相关文章:

redis - 将 redis-rs 与 actix-web 一起使用

rust - 将本地字符串作为切片返回 (&str)

rust - 为什么匹配表达式不会先于其他 ARM 报告一个包罗万象的 ARM (_) 的错误?

rust - 类型不匹配解决从 future channel 转发消息到 WebSocket Sink 时的错误类型

string - Rust 字符串中的 "growable"和 "mutable"有什么区别?

rust - 如何展平两个结果

rust - 为什么我的汉明权重函数在 C 中有效但在 Rust 中无效?

rust - 可从方法访问但不能从外部访问的结构属性

vector - 在不改变向量的情况下返回 Rust 中向量的最后 n 个元素

rust - 如何通过编译器选项覆盖常量?