我是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
。您当前正在使用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/