Rust声称这种模式案例无法访问,为什么? [重复]

问题描述 投票:-1回答:1

鉴于此代码

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同意我的意见

CLion inference of union cases

rust union
1个回答
1
投票

来自rust reference

访问联合字段的另一种方法是使用模式匹配。联合字段上的模式匹配使用与结构模式相同的语法,但模式必须只指定一个字段

所以不,联盟不能像这样匹配。外部文档(或源)是确定应使用哪个联合字段的唯一方法。这就是它被标记为不安全的原因

© www.soinside.com 2019 - 2024. All rights reserved.