< 返回版块

cqustlym 发表于 2025-06-20 15:13

Tags:Match

enum Tingpai {
    Ting1,
    Ting2,
}

impl Tingpai {
    fn random() -> Tingpai {
        let mut rng = rand::rng();
        let random_num: u8 = Rng::random_range(&mut rng, 1..3);
        match random_num {
            1 => Tingpai::Ting1,
            2 => Tingpai::Ting2,
        }
    }
}

请问这段代码中为什么错误显示是没有覆盖所有的match选项?random_num生成的值不是只有1和2吗?

评论区

写评论
xiaoyaou 2025-06-20 17:08

编译器推断是基于类型系统的,在没有特殊“开后门”的情况下,编译器眼里u8就是0~255,random_num类型就是u8,是无法靠类型系统以外的信息限制枚举范围的,那些是优化器的事,不属于语法/语义范畴。你可以用unreachable!宏来声明该分支应当不可达


match randon_num {
    1 => ...
    2 => ...
    _ => unreachable!()
}

miaomiao1992 2025-06-20 15:25

u8是动态生成的,编译器无法知道只能是1,2。

你可以加一个_=>panic!(xxxx)

1 共 2 条评论, 1 页