用于数组索引的正确类型是什么?

Jon*_*röm 8 arrays rust

此代码有效,但我想显式声明索引范围的类型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]);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Fra*_*gné 10

编译器给你一个关于这个的说明:

   = note: slice indices are of type `usize`
Run Code Online (Sandbox Code Playgroud)

您必须使用a索引切片usize.usize是一个无符号整数类型,与指针大小相同,可以表示内存偏移量或内存中对象的大小.在32位系统上,它是一个32位整数,在64位系统上,它是一个64位整数.声明你的索引变量,usize除非你真的有很多,在这种情况下,你可以使用x as usize它们转换为usize.

当你省略类型注释时,Rust推断你的整数文字必须是类型的,usize因为切片实现Index<usize>而不是Index<i32>Index<any other integral type>.