【问题标题】:How to loop certain (variable) number of times?如何循环某些(可变)次数?
【发布时间】:2019-09-21 17:25:24
【问题描述】:

这个问题可能看起来非常基本,但我很难弄清楚如何做到这一点。我有一个整数,需要用for循环循环整数次。

首先,我试过了——

fn main() {
    let number = 10; // Any value is ok
    for num in number {
        println!("success");
    }
}

这会打印错误

error[E0277]: `{integer}` is not an iterator
 --> src/main.rs:3:16
  |
3 |     for num in number{
  |                ^^^^^^ `{integer}` is not an iterator
  |
  = help: the trait `std::iter::Iterator` is not implemented for `{integer}`
  = note: if you want to iterate between `start` until a value `end`, use the exclusive range syntax `start..end` or the inclusive range syntax `start..=end`
  = note: required by `std::iter::IntoIterator::into_iter`

接下来,我试了——

fn main() {
    let number = 10; // Any value is ok
    for num in number.iter() {
        println!("success");
    }
}

编译器说整数没有方法 iter

error[E0599]: no method named `iter` found for type `{integer}` in the current scope
 --> src/main.rs:3:23
  |
3 |     for num in number.iter() {
  |                       ^^^^

我该怎么做?

【问题讨论】:

标签: for-loop rust iterator integer


【解决方案1】:

这是因为您对编译器说的是包含在number 中的num,其中number 不是迭代器,也没有实现iter,而不是range 中的num 0..number 是一个迭代器。

文档将for 循环描述为:

for loop_variable in iterator {
    code()
}

将代码改为:

fn main() {
    let number = 10; 
    for num in 0..number { // change it to get range
        println!("success");
    }
}

你也可以改成:

fn main() {
    let number = 10; 
    for num in 1..=number { // inclusive range
        println!("success");
    }
}

或者到:

fn main() {
    let number = 10; 
    for _ in 0..number { // where _ is a "throw away" variable
        println!("success");
    }
}

另见for documentation

【讨论】:

    【解决方案2】:

    Rust for 循环采用迭代器(实际上可以是 converted into an iterator 的任何东西)。无法将唯一的整数转换为迭代器,但 range 可以。

    fn main() {
        let number = 10; // Any value is ok
        for num in 0..number {
            println!("success");
        }
    }
    

    https://play.integer32.com/?version=stable&mode=debug&edition=2018&gist=029803cf8ac6efaa3113b2f32ae6ef0d

    【讨论】:

    • 您的答案与建议的副本有何不同?请避免添加多余的信息。这就是重复标志的用途。如需更多信息,请参阅help/duplicates
    • 抱歉,我在打字时没有看到评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    相关资源
    最近更新 更多