请求允许Range循环中使用u64类型i及解决循环语法报错问题
解决Rust中for循环遍历u64范围的问题
我来帮你搞定这两个Rust语法问题,一步步拆解:
第一个错误:"literal out of range for i32"
这个报错的根源很清晰:Rust里整数字面量默认类型是i32,而你写的65000000000(650亿)远远超出了i32的取值上限(i32最大值仅为2147483647,约21亿),所以编译器判定这个字面量无效。
解决方法非常直接——给字面量加上u64后缀,明确告诉编译器这是一个无符号64位整数:
// 给起始或结束值加u64后缀即可,编译器会自动推断整个Range的类型 for i in 0u64..65000000000u64 { do_something(); }
甚至可以只给其中一个值加后缀,另一个会自动匹配类型,代码更简洁:
for i in 0u64..65000000000 { do_something(); }
第二个错误:"error: missing in in for loop"
你尝试的for i: u64 in ...写法不符合Rust的语法规则——for循环的迭代变量位置属于模式(pattern),不能直接在这里添加类型标注。
如果确实需要明确变量类型(其实上面的方法已经让i自动推断为u64,一般没必要多此一举),可以在循环体内重新绑定变量并标注类型:
for i in 0u64..65000000000 { let i: u64 = i; // 语法合法,但实际多余 do_something(); }
更推荐的还是通过指定Range的类型让迭代变量自动推断,这样代码更干净。
总结
只要确保你的Range是u64类型(通过给字面量加u64后缀),for循环里的变量i就会自动被推断为u64,两个错误都能彻底解决。
内容的提问来源于stack exchange,提问作者Daniel Lee
相关产品推荐
相关产品推荐

