我是Rust的初学者,在文档中找不到与此有关的任何内容。将不胜感激。C ++中的以下循环
for (const int i : {1,2,3,4,5})
cout << i;
Run Code Online (Sandbox Code Playgroud)
大致翻译成
for &i in &[1,2,3,4,5] {
println!("{}", i);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法写相当于
for (int i : {1,2,3,4,5}) {
i += 1;
cout << i;
}
Run Code Online (Sandbox Code Playgroud)
简而言之在Rust中?也就是说,是否有一个快捷方式可以对要迭代的内容进行本地可变复制?
是!
a的左侧for
是模式。
为此,需要三种模式:
&pat
就像您已经拥有的一样,因为在迭代时会得到引用。mut name
创建可变的绑定。您当前正在使用name
模式,该模式创建不可变的绑定,可以说是最简单的模式!(pat)
括号可以用来消除子模式的歧义。模式可以组合在一起,从而得到:
for &(mut i) in &[1, 2, 3, 4, 5] {
i += 1;
println!("{}", i);
}
Run Code Online (Sandbox Code Playgroud)
(永久链接到操场)
括号对于消除另一个模式是必不可少的,&mut pat
这意味着绑定一个可变的引用,这是不一样的。
但是,我不会说这很常见,更常见的方法是执行以下两个步骤:
for &i in &[1, 2, 3, 4, 5] {
let i = i + 1;
println!("{}", i);
}
Run Code Online (Sandbox Code Playgroud)
要么
for &i in &[1, 2, 3, 4, 5] {
let mut i = i; // rebind as mutable
i += 1;
println!("{}", i);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
80 次 |
最近记录: |