在不使用unsafe或可能调用panic!的代码的情况下,是否有可能向编译器解释变量v
在标记为1
的行中表现良好?
#[derive(PartialEq, Debug)]
enum Enum {
V1,
V2,
V3,
}
fn main() {
let e = Enum::V1;
let mut v: i32;
if e == Enum::V1 || e == Enum::V2 {
v = 17; //some complex, costy expression
}
match e {
Enum::V1 | Enum::V2 => {
println!("Results: {}", v); //1
}
_ => {}
}
}
编译器报告如下:
error[E0381]: use of possibly uninitialized variable: `v`
--> src/main.rs:18:37
|
18 | println!("Results: {}", v); //1
| ^ use of possibly uninitialized `v`
我有一个复杂的表达式来初始化v
,而不是使用17
。由于v
的类型没有实现Default
,我只需要在Enum::V1
和Enum::V2
情况下使用v
。
在真实的代码中,我分别为Enum::V1
和Enum::V2
设置了单独的分支,并且我可以将v
的初始化移到那里。
我想让我的代码更清晰,并且不想使用潜在的糟糕方法,比如unsafe
或Option::unwrap
v
放入枚举中仍然需要在某个时刻计算出v
的值,但是并没有展示如何仅为两种必需的情况计算它。在使用其他答案之后,这个答案会更有意义。两个枚举:一个像 OP 一样,在另一个答案中使用,另一个像这个答案一样。 - Shepmaster