У меня есть перечисление, где каждый вариант имеет массив, но массивы имеют разную длину. Если я пытаюсь match
для этого перечисления:
enum EnumArray {
One([i32; 1]),
Two([i32; 2]),
}
fn main() {
let arr = EnumArray::One([1]);
match arr {
EnumArray::One(arr) | EnumArray::Two(arr) => use_array_as_slice(&arr),
}
}
fn use_array_as_slice(arr: &[i32]) {}
, я получаю сообщение об ошибке:
error[E0308]: mismatched types
--> src/main.rs:9:46
|
8 | match arr {
| --- this expression has type `EnumArray`
9 | EnumArray::One(arr) | EnumArray::Two(arr) => use_array_as_slice(&arr),
| ^^^ expected an array with a fixed size of 1 element, found one with 2 elements
|
= note: expected type `[i32; 1]`
found type `[i32; 2]`
Как я понимаю, мне нужно привести типы [i32; 1]
и [i32; 2]
&[i32]
чтобы исправить эту ошибку. Как я могу сделать это внутри match
руки?
детская площадка
«Использовать две руки match
» не является ответом на этот вопрос.