Generics 在从一个泛型映射到另一个泛型时,为什么必须销毁和重构泛型枚举的非泛型变量?

Generics 在从一个泛型映射到另一个泛型时,为什么必须销毁和重构泛型枚举的非泛型变量?,generics,types,enums,rust,variant,Generics,Types,Enums,Rust,Variant,我有一个泛型枚举,其中只有一个变量使用泛型类型 当将ParseResult“转换”为ParseResult时,编译器也会强制我销毁非泛型部分。非通用零件立即重新组装,并以完全相同的方式返回 有没有一个没有代码重复的更优雅的解决方案 [derivePartialEq,调试] 枚举ParseResultc:char->impl Fn&'a str->ParseResult 但非通用零件立即重新组装并以完全相同的方式返回。没有代码复制,难道没有更智能/更优雅的解决方案吗 看起来它是以相同的方式重新组装

我有一个泛型枚举,其中只有一个变量使用泛型类型

当将ParseResult“转换”为ParseResult时,编译器也会强制我销毁非泛型部分。非通用零件立即重新组装,并以完全相同的方式返回

有没有一个没有代码重复的更优雅的解决方案

[derivePartialEq,调试] 枚举ParseResultc:char->impl Fn&'a str->ParseResult 但非通用零件立即重新组装并以完全相同的方式返回。没有代码复制,难道没有更智能/更优雅的解决方案吗

看起来它是以相同的方式重新组装的,但这不是因为它将类型从ParseResult更改为ParseResult或ParseResult。它们的大小不同,因此ParseResult::Failederr与ParseResult::Failederr不同

如果我们看一下,您可以看到使用了相同的模式:

match self {
     Ok(t) => Ok(op(t)),
     Err(e) => Err(e),
}
但非通用零件立即重新组装并以完全相同的方式返回。没有代码复制,难道没有更智能/更优雅的解决方案吗

看起来它是以相同的方式重新组装的,但这不是因为它将类型从ParseResult更改为ParseResult或ParseResult。它们的大小不同,因此ParseResult::Failederr与ParseResult::Failederr不同

如果我们看一下,您可以看到使用了相同的模式:

match self {
     Ok(t) => Ok(op(t)),
     Err(e) => Err(e),
}

顺便说一句:Rusts自己的结果已经提供了您可以尝试的方法。当然,只有当您的问题与ParseResult相关而与其他泛型枚举无关时,这才适用。请花一些时间和考虑,以产生良好的例子。作为旁注:生锈自己的结果已经提供了方法,你可以尝试。当然,只有当您的问题与ParseResult相关而与其他泛型枚举无关时,这才适用。请花一些时间和考虑,以产生良好的例子。