nej*_*omo 25
从1.0开始,for循环使用具有Iterator特征的类型值.这是与for循环相关的教程:
以及更多细节
http://doc.rust-lang.org/nightly/book/iterators.html
如果您对循环的操作方式感兴趣,请在此处查看所描述的语法糖:
http://doc.rust-lang.org/std/iter/index.html
示例围栏:
fn main() {
let strs = ["red", "green", "blue"];
for sptr in strs.iter() {
println!("{}", sptr);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您只想迭代一系列数字,就像在C的Iterator
循环中一样,您可以使用以下for
语法创建数值范围:
for i in 0..3 {
println!("{}", i);
}
Run Code Online (Sandbox Code Playgroud)
如果您需要索引和数组中的元素,那么获得该a..b
方法的惯用方法是使用以下方法:
fn main() {
let strs = ["red", "green", "blue"];
for (i, s) in strs.iter().enumerate() {
println!("String #{} is {}", i, s);
}
}
Run Code Online (Sandbox Code Playgroud)
笔记:
循环项是对iteratee元素的借用引用.在这种情况下,Iterator::enumerate
有类型的元素strs
- 它们是借用静态字符串的指针.这意味着&'static str
有类型,sptr
所以我们取消引用它&&'static str
.我更喜欢的另一种形式是:
for &s in strs.iter() {
println!("{}", s);
}
Run Code Online (Sandbox Code Playgroud)Lin*_*per 11
实际上,本教程的Loops部分确实涵盖了for
循环:
迭代向量时,请
for
改为使用.Run Code Online (Sandbox Code Playgroud)for elt in ["red", "green", "blue"] { std::io::println(elt); }
但是如果你需要索引,你可以使用uint::range
核心库(或int::range
或u8::range
或u32::range
或u64::range
)中的函数和Rust的块语法来执行类似下面的操作:
range(0u, 64u, {|i| C[i] = A[i] + B[i]});
Run Code Online (Sandbox Code Playgroud)
Rust用于支持这种等效的语法,但后来被删除了:
range(0u, 64u) {|i|
C[i] = A[i] + B[i];
}
Run Code Online (Sandbox Code Playgroud)