文档没有说明如何,教程完全忽略for循环。
答案 0 :(得分:22)
从1.0开始,for循环使用Iterator
trait的类型值。
本书在chapter 3.5和chapter 13.2中介绍了这项技术。
如果您对循环的操作方式感兴趣,请参阅此处描述的语法糖:
http://doc.rust-lang.org/std/iter/index.html
示例:
fn main() {
let strs = ["red", "green", "blue"];
for sptr in strs.iter() {
println!("{}", sptr);
}
}
如果你只想迭代一系列数字,就像在C的for
循环中一样,你可以使用a..b
语法创建一个数值范围:
for i in 0..3 {
println!("{}", i);
}
如果您需要索引和数组中的元素,那么使用Iterator::enumerate
方法获得该方法的惯用方法是:
fn main() {
let strs = ["red", "green", "blue"];
for (i, s) in strs.iter().enumerate() {
println!("String #{} is {}", i, s);
}
}
注意:
循环项是对iteratee元素的借用引用。在这种情况下,strs
的元素具有类型&'static str
- 它们是借用静态字符串的指针。这意味着sptr
的类型为&&'static str
,因此我们将其取消引用为*sptr
。我更喜欢的另一种形式是:
for &s in strs.iter() {
println!("{}", s);
}
答案 1 :(得分:11)
实际上,本教程的Loops部分涵盖了for
次循环:
迭代向量时,请改用
for
。for elt in ["red", "green", "blue"] { std::io::println(elt); }
但如果您需要索引,可以使用uint::range
function from the core library(或int::range
或u8::range
或u32::range
或u64::range
)执行以下操作和Rust的块语法:
range(0u, 64u, {|i| C[i] = A[i] + B[i]});
Rust曾用于支持这种等效语法,但后来被删除了:
range(0u, 64u) {|i|
C[i] = A[i] + B[i];
}
答案 2 :(得分:10)
for i in range(0, 100)
现已弃用,取而代之的是for i in 0..100
(根据rustc 1.0.0-nightly
。
另外值得注意的是,当您使用范围内的标识符(例如for i in 0..a
)时,编译器无法消除歧义,因此您必须使用for i in (0..a)
,但其中{{1}} {{1}} 3}}提交修复此问题。
答案 3 :(得分:2)
请注意,从rustc 0.4(2012年10月)开始,
的替代构造range(0u, 64u) {|i|
C[i] = A[i] + B[i];
}
似乎不再受支持了。
答案 4 :(得分:0)
使用int::range。