是否可以在Rust for循环中声明变量的类型?

Syn*_*ose 19 rust

C++示例:

for (long i = 0; i < 101; i++) {
    //...
}
Run Code Online (Sandbox Code Playgroud)

在Rust中我尝试过:

for i: i64 in 1..100 {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我可以很容易地let i: i64 =在for循环之前声明一个var,但我宁愿学习正确的方法来做到这一点,但这导致了

error: expected one of `@` or `in`, found `:`
 --> src/main.rs:2:10
  |
2 |     for i: i64 in 1..100 {
  |          ^ expected one of `@` or `in` here
Run Code Online (Sandbox Code Playgroud)

Bur*_*hi5 21

您可以在范围中使用的文字之一上使用整数后缀.类型推断将完成剩下的工作:

for i in 1i64..101 {
    println!("{}", i);
}
Run Code Online (Sandbox Code Playgroud)

  • 人们确实应该能够做到“for i: u8 in 0..26”。 (3认同)
  • 按照类型归属方法,`range({let x:i64 = 1; x},100)`也可以.当然,我不建议你实际*做那个. (2认同)

lje*_*drz 5

不,这是不是可以声明变量的类型在一个for循环。

取而代之的是,更通用的方法(例如,也适用于enumerate())是let通过破坏循环体内的项来引入绑定。

例:

for e in bytes.iter().enumerate() {
    let (i, &item): (usize, &u8) = e; // here
    if item == b' ' {
        return i;
    }
}
Run Code Online (Sandbox Code Playgroud)