I need to initialize each element of an array to a non-constant expression. Can I do that without having to first initialize each element of the array to some meaningless expression? Here's an example of what I'd like to be able to do:
fn foo(xs: &[i32; 1000]) {
let mut ys: [i32; 1000];
for (x, y) in xs.iter().zip(ys.iter_mut()) {
*y = *x / 3;
}
// ...
}
This code gives the compile-time error:
error[E0381]: borrow of possibly uninitialized variable: `ys`
--> src/lib.rs:4:33
|
4 | for (x, y) in xs.iter().zip(ys.iter_mut()) {
| ^^ use of possibly uninitialized `ys`
To fix the problem, I need to change the first line of the function to initialize the elements of ys
with some dummy values like so:
let mut ys: [i32; 1000] = [0; 1000];
Is there any way to omit that extra initialization? Wrapping everything in an unsafe
block doesn't seem to make any difference.