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吗?
1
共 2 条评论, 1 页
评论区
写评论编译器推断是基于类型系统的,在没有特殊“开后门”的情况下,编译器眼里
u8
就是0~255
,random_num
类型就是u8
,是无法靠类型系统以外的信息限制枚举范围的,那些是优化器的事,不属于语法/语义范畴。你可以用unreachable!
宏来声明该分支应当不可达u8是动态生成的,编译器无法知道只能是1,2。
你可以加一个_=>panic!(xxxx)