编者注:在Rust 1.0发布之前询问了这个问题
..并引入了"范围"操作符.问题的代码不再代表当前的样式,但下面的一些答案使用的代码可以在Rust 1.0及以后版本中使用.
我在Rust by Example网站上玩,想要反过来打印出fizzbuzz.这是我尝试过的:
fn main() {
// `n` will take the values: 1, 2, ..., 100 in each iteration
for n in std::iter::range_step(100u, 0, -1) {
if n % 15 == 0 {
println!("fizzbuzz");
} else if n % 3 == 0 {
println!("fizz");
} else if n % 5 == 0 {
println!("buzz");
} else {
println!("{}", n);
}
}
}
Run Code Online (Sandbox Code Playgroud)
没有编译错误,但它没有打印出任何东西.如何从100迭代到1?
Lux*_*pes 90
前向循环是这样的:
for x in 0..100 {
println!("{}", x);
}
Run Code Online (Sandbox Code Playgroud)
并通过调用Iterator::rev反转顺序完成反向循环:
for x in (0..100).rev() {
println!("{}", x);
}
Run Code Online (Sandbox Code Playgroud)
A.B*_*.B. 25
编者注:这个问题是指在Rust 1.0之前的Rust部分.查看最新代码的其他答案.
您的代码不起作用,因为uint值-1等于uint的最大值.检测到溢出后,range_step迭代器立即停止.使用int修复此问题.
std::iter::range_step(100i, 0, -1)
Run Code Online (Sandbox Code Playgroud)
您也可以使用反转迭代器rev().
for n in range(0u, 100).rev() { ... }
Run Code Online (Sandbox Code Playgroud)
虽然请注意这将是99-> 0,而不是100-> 1.