假设我有一个枚举,它包含某种嵌套结构。有没有一种方法可以建模,这样Rust编译器可以在使用match
时提供有用的检查,同时避免冗长的match
语句。例如,是否可以沿着以下路线沿着进行,或者如何更好地模拟这种情况?
enum Group {
TeamA1,
TeamA2,
TeamB1,
TeamB2,
TeamC1
}
fn is_team_a(group: Group) -> bool {
todo!()
}
fn is_team_b(group: Group) -> bool {
todo!()
}
fn is_team_c(group: Group) -> bool {
todo!()
}
fn hi(group::Group) -> String {
match group {
is_team_a => "hi team A".to_string(),
is_team_b => "hi team B".to_string(),
is_team_c => "hi team C".to_string()
}
}
1条答案
按热度按时间kjthegm61#
有很多方法可以解决这个问题;你选择哪一个当然部分是你的设计决定,部分取决于使用情况。
我想到了几个选择:
积极的一面是,这段代码与您的示例非常接近。
然而,负面影响是:
unreachable!()
分支,因为无法证明基于if的匹配是穷举的如果这是我的代码,我会通过创建一个单独的
Team
枚举来解决这个问题:或者将两者合并结合起来: