鉴于此代码
union IntOrFloat {
i: i32,
f: f32,
}
fn process_value(iof: IntOrFloat) {
unsafe {
match iof {
IntOrFloat { i: 42 } => {
println!("meaning of life value");
}
IntOrFloat { i } => {
println!("integer with value {}", i);
}
IntOrFloat { f } => {
println!("f32 = {}", f);
}
}
}
}
Rust给了我以下警告:
warning: unreachable pattern
--> src\main.rs:445:13
|
445 | IntOrFloat { f } => {
| ^^^^^^^^^^^^^^^^
|
= note: #[warn(unreachable_patterns)] on by default
我为什么要这个?显然,i
案件需要一个i32
,而f
案件需要一个f32
,两者都是可能的。
更新:CLion同意我的意见
访问联合字段的另一种方法是使用模式匹配。联合字段上的模式匹配使用与结构模式相同的语法,但模式必须只指定一个字段
所以不,联盟不能像这样匹配。外部文档(或源)是确定应使用哪个联合字段的唯一方法。这就是它被标记为不安全的原因