C ++示例:
for (long i = 0; i < 101; i++) {
//...
}
在Rust中我尝试过:
for i: i64 in 1..100 {
// ...
}
我可以很容易地在for循环之前声明let i: i64 =
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
答案 0 :(得分:17)
您可以在您在该范围内使用的其中一个文字上使用integer suffix。类型推断将完成剩下的工作:
for i in 1i64..101 {
println!("{}", i);
}
答案 1 :(得分:4)
不,在for
循环中声明变量的类型是不。
相反,更通用的方法(例如也适用于enumerate()
)是通过解构循环体内的项来引入let
绑定。
示例:
for e in bytes.iter().enumerate() {
let (i, &item): (usize, &u8) = e; // here
if item == b' ' {
return i;
}
}
答案 2 :(得分:0)
如果循环变量恰好是返回通用类型的函数调用的结果,则
let input = ["1", "two", "3"];
for v in input.iter().map(|x| x.parse()) {
println!("{:?}", v);
}
error[E0284]: type annotations required: cannot resolve `<_ as std::str::FromStr>::Err == _`
--> src/main.rs:3:37
|
3 | for v in input.iter().map(|x| x.parse()) {
| ^^^^^
您可以使用 turbofish 指定类型:
for v in input.iter().map(|x| x.parse::<i32>()) {
// ^^^^^^^
println!("{:?}", v);
}
或者您可以使用完全限定的语法:
for v in input.iter().map(|x| <i32 as std::str::FromStr>::from_str(x)) {
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
println!("{:?}", v);
}
另请参阅: