给出此代码
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同意我的观点
答案 0 :(得分:1)
访问联合字段的另一种方法是使用模式匹配。联合字段上的模式匹配使用与结构模式相同的语法,不同之处在于模式必须恰好指定一个字段
所以不,工会不能像这样匹配。外部文档(或来源)是确定应使用哪个联合字段的唯一方法。这就是为什么它被标记为不安全