我有一个枚举:
enum Group {
OfTwo { first: usize, second: usize },
OfThree { one: usize, two: usize, three: usize },
}
并且我想编写一个仅将Group::OfTwo
变体作为参数的函数:
fn proceed_pair(pair: Group::OfTwo) {
}
但是当我这样做时,我得到消息:
error[E0573]: expected type, found variant
有没有办法做到这一点?
答案 0 :(得分:3)
enum
的变体是 values ,并且都具有相同的 type -enum
本身。函数参数是给定类型的变量,并且函数主体必须对该类型的 any 值有效。因此,您要做的就是行不通。
但是,有一种通用的设计枚举模式,这可能会有所帮助。也就是说,使用单独的struct
来保存每个enum
变体的数据。例如:
enum Group {
OfTwo(OfTwo),
OfThree(OfThree),
}
struct OfTwo { first: usize, second: usize }
struct OfThree { one: usize, two: usize, three: usize }
fn proceed_pair(pair: OfTwo) {
}
您以前在enum
上匹配的任何地方,如下所示:
match group {
Group::OfTwo { first, second } => {}
Group::OfThree { first, second, third } => {}
}
您将替换为:
match group {
Group::OfTwo(OfTwo { first, second }) => {}
Group::OfThree(OfThree { first, second, third }) => {}
}