Если у меня есть такой тип, как MyEnum<T>
, как его сопоставить в случаях, когда не каждый параметр параметризуется?Как сопоставить параметризованное перечисление от общего типа к другому?
Например, я хотел бы преобразовать из MyEnum<u32>
в MyEnum<String>
:
enum MyEnum<T> {
B,
C,
D(T),
}
fn trans(a: MyEnum<u32>) -> MyEnum<String> {
match a {
MyEnum::D(i) => MyEnum::D(i.to_string()),
other_cases => other_cases,
}
}
fn main() {}
Это терпит неудачу с:
error[E0308]: match arms have incompatible types
--> src/main.rs:8:9
|
8 | match a {
| ^expected struct `std::string::String`, found u32
|
= note: expected type `MyEnum<std::string::String>`
= note: found type `MyEnum<u32>`
note: match arm with an incompatible type
--> src/main.rs:10:28
|
10 | other_cases => other_cases,
| ^^^^^^^^^^^
Вместо этого other_cases => other_cases
линии, я попробовал это, также без успеха:
other_cases => {
let o: MyEnum<String> = other_cases;
o
}
'MyEnum' и '' MyEnum два различных типа, поэтому их варианты не являются взаимозаменяемыми. –