这段代码可以工作,但是我想显式声明索引范围max
的类型。但是uX
或iX
,其中X = 8,16或32会产生编译错误。正确的类型是什么?
fn main() {
let mut arr2: [[f64; 3]; 3] = [[0.0; 3]; 3];
let pi: f64 = 3.1415926535;
let max = 3; // let max: i16 e.g. is wrong
for ii in 0..max {
for jj in 0..3 {
let i = ii as f64;
let j = jj as f64;
arr2[ii][jj] = ((i + j) * pi * 41.0).sqrt().sin();
println!("arr2[{}][{}] is {}", ii, jj, arr2[ii][jj]);
}
}
}
1条答案
按热度按时间cpjpxq1n1#
编译器会给你一个提示:
必须使用
usize
对切片进行索引。usize
是无符号整型,大小与指针相同,可以表示内存偏移量或内存中对象的大小。在32位系统上,它是32位整数,而在64位系统上,它是一个64位整数,将索引变量声明为usize
,除非您确实有很多索引变量,在这种情况下,您可以使用x as usize
将它们转换为usize
。当您省略类型注解时,Rust推断您的整数常量必须是
usize
类型,因为slices实现Index<usize>
,而不是Index<i32>
或Index<any other integral type>
。