Вариантами enum
являются значения и все они имеют одинаковый тип - сам enum
. Аргумент функции - это переменная данного типа, и тело функции должно быть допустимым для любого значения этого типа. Так что то, что вы хотите сделать, просто не будет работать.
Тем не менее, существует общая схема проектирования перечислений, которая может помочь здесь. То есть использовать отдельный 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 }) => {}
}