Когда вы выполняете цикл for, код является последовательным: компилятор сначала устанавливает значение в индекс 0, затем 1 и т. Д., Но он не имеет ни малейшего представления, что вы инициализируете массив таким образом.Например, вы можете забыть последний индекс, и ваш код будет недействительным.
Проще говоря: можно изменить переменную только тогда, когда она инициализирована , а arr
- это ваша переменная, а не arr[0]
.
Когда вы индексируете что-то в Rust, это десагадируется в index_mut
метод .В вашей ситуации вы вызываете метод arr
, который является неинициализированной переменной.
Как вы сказали, решение вашей проблемы - сначала инициализировать ваш массив, например, с нулями:
fn main() {
const LEN : usize = 5;
let mut arr = [0; LEN];
for i in 0..LEN {
arr[i] = fib(i as u32);
}
println!("{:?}", arr);
}
fn fib(n: u32) -> u32 {
match n {
0 => 0,
1 => 1,
_ => fib(n-1) + fib(n-2)
}
}