使用常量(非文字)声明数组作为维度说明符

时间:2016-10-25 03:44:11

标签: arrays indexing rust declaration

以下代码有效,但为了轻松更改数组的大小和循环的索引范围,可以使用变量max来指定数组的维数吗?

fn main() {
    let max: i64 = 3;

    let mut arr2: [[f64; 3]; 3] = [[0.0; 3]; 3]; //replace 3 by max?
    // let mut arr2: [[f64; max]; max] = [[0.0; max]; max]; //does not work

    let pi: f64 = 3.1415926535;
    let max2 = max as usize;

    for ii in 0..max2 {
        for jj in 0..max2 {
            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]);
        }
    }
}

使用注释掉的行声明我收到此错误:

error[E0513]: no type for local variable 10
 --> <anon>:6:32
  |
6 |     let mut arr2: [[f64; max]; max] = [[0.0; max]; max]; //does not work
  |                                ^^^

1 个答案:

答案 0 :(得分:5)

Rust中的数组必须以编译时已知的固定大小声明。

如果在编译时确实知道了大小,那么定义一个常量而不是变量:

const MAX: usize = 3;

如果在编译时未知大小,请改用Vec