以下代码有效,但为了轻松更改数组的大小和循环的索引范围,可以使用变量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
| ^^^
答案 0 :(得分:5)
Rust中的数组必须以编译时已知的固定大小声明。
如果在编译时确实知道了大小,那么定义一个常量而不是变量:
const MAX: usize = 3;
如果在编译时未知大小,请改用Vec
。