【发布时间】:2018-11-25 21:07:06
【问题描述】:
编译器抱怨一个变量没有初始化,这是正确的。 但是,变量出现在表达式的左侧。
我想我可以通过初始化数组来轻松解决这个问题,但我更感兴趣的是理解为什么编译器认为这是一个错误条件。
我认为这不会在其他语言中被标记为错误。
这是我的代码:
fn main() {
const LEN: usize = 5;
let mut arr: [u32; 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),
}
}
这是错误:
error[E0381]: use of possibly uninitialized variable: `arr`
--> src/main.rs:6:9
|
6 | arr[i] = fib(i as u32);
| ^^^^^^^^^^^^^^^^^^^^^^ use of possibly uninitialized `arr`
error[E0381]: use of possibly uninitialized variable: `arr`
--> src/main.rs:9:22
|
9 | println!("{:?}", arr);
| ^^^ use of possibly uninitialized `arr`
【问题讨论】:
-
编译器不够聪明,但是 Rust 提供了很多工具来制作比 Iterator 更好的代码,或者如果你想保留一个数组,则 std::mem::uninitialized 是“相信我”的解决方案。
-
感谢您指出 std::mem::uninitialized。快速搜索将我带到此页面,其中显示了一些与我的非常相似的代码:doc.rust-lang.org/std/mem/fn.uninitialized.html
标签: rust