编者按:这个问题是在Rust 1.0发布和引入.."range"操作符之前提出的.问题的代码不再代表当前的样式,但下面的一些答案使用的代码将在Rust 1.0及以后的版本中工作.

我当时正在玩Rust by Example website,想把fizzbuzz倒过来打印出来.以下是我try 过的:

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);
        }
    }
}

没有编译错误,但它没有打印出任何内容.如何从100迭代到1?

推荐答案

编者按:这个问题指的是 rust 迹1.0之前的 rust 迹部分.查看其他答案以获取最新代码.

您的代码无法运行,因为uint的值-1等于uint的最大值.检测到溢出后,range_step迭代器立即停止.使用int可以解决这个问题.

std::iter::range_step(100i, 0, -1)

还可以用rev()反转迭代器.

for n in range(0u, 100).rev() { ... }

Though note that this will be from 99->0, rather than 100->1.

Rust相关问答推荐

在Rust中,有没有一种方法让我定义两个 struct ,其中两个都遵循标准 struct ?

如何将`Join_all``Vec<;Result<;Vec<;Foo&>;,Anywhere::Error&>;`合并到`Result<;Vec<;Foo&>;,Anywhere::Error&>;`

这个规则关于或模式到底是什么意思?如果表达片段的类型与p_i|q_i...&q;不一致,就会形成

如何go 除铁 rust 中路径组件的第一项和最后一项?

如何为rust trait边界指定多种可能性

捕获FnMut闭包的时间不够长

为昂贵的for循环制作筛子

为什么我们需要std::thread::scope,如果我们可以使用thread.join()在函数的生命周期内删除引用?

在Rust 中移动原始指针的靶子安全吗

为什么`str`类型可以是任意大小(未知大小),而`string`类型的大小应该是已知的?

链表堆栈溢出

装箱特性如何影响传递给它的参数的生命周期 ?(举一个非常具体的例子)

为什么 GAT、生命周期和异步的这种组合需要 `T: 'static`?

如何强制匹配的返回类型为()?

如何在Rust中使用Serde创建一个自定义的反序列化器来处理带有内部标记的枚举

如何将 C++ 程序链接到 Rust 程序,然后将该 Rust 程序链接回 C++ 程序? (cpp -> rust -> cpp)

在构建器模式中捕获 &str 时如何使用生命周期?

产生拥有值的迭代器的 Rust 可变borrow 在循环中失败

当我在 struct 中存储异步函数时,为什么它需要生命周期

Rustlings 切片原语