我是 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/