【发布时间】:2019-03-05 20:45:11
【问题描述】:
假设我有以下枚举
enum MyEnum {
VariantA,
VariantB,
VariantC,
}
我可以通过这样做导出整个枚举的 PartialEq 特征
#[derive(PartialEq)]
enum MyEnum {
VariantA,
VariantB,
VariantC,
}
我想要做的是派生特征,但仅限于特定变体而不是整个枚举。那可能吗? (或者它甚至有意义吗?)。
【问题讨论】:
-
对我来说没有意义。特征派生是类型的编译时属性。变体是特定对象的运行时属性。听起来像XY problem。也许你应该描述你试图从中实现的行为。
-
当你想比较两个对象时使用 PartialEq 或 Eq,假设你想检查
MyEnum::VariantA == MyEnum::VariantB。 -
变体是来自其他 crate 的类型。并非所有人都实现了 PartialEq 特征。但我很乐意随时使用它;而且我更愿意将其保留为单个枚举。
-
在这种情况下,您最好的选择可能是手动实现
PartialEq(impl PartialEq for MyEnum),以便在将不受支持的变体之一用作操作数时返回false。 -
@apemanzilla 是的,这将是我的最后选择。您实际上可以从 Rust 获取生成的代码并删除有问题的代码。但是每次使用更多变体更新枚举时都必须重做。