Derive a Trait for particular variants

前端 未结 2 1590

Let\'s say I have the following Enum

enum MyEnum {
  VariantA,
  VariantB,
  VariantC,
}

I can derive the PartialEq trait for the whole enum by

2条回答
  •  心在旅途
    2021-01-22 16:01

    What I want to do, is derive the trait but only to particular variants and not the whole enum. Is that possible? (or does it even make sense?).

    This doesn't really make sense.

    Traits are implemented for types. An enum is a type and its variants are its values. Your question is equivalent to asking if you could implement a trait for some Strings but not others.

    If it is acceptable for unsupported variants to always return false, similar to how f32's PartialEq implementation returns false whenever you compare a NaN value, then you can write that impl by hand:

    impl PartialEq for MyEnum {
        fn eq(&self, other: &MyEnum) -> bool {
            use MyEnum::*;
            match (self, other) {
                // VariantA and VariantB are supported
                (VariantA(value), VariantA(other_value)) => value == other_value,
                (VariantB(value), VariantB(other_value)) => value == other_value,
                // Any other combinations of variants end up here
                _ => false,
            }
        }
    }
    

    Note that you must not implement Eq this way, since implementations of Eq may be assumed to be total, which this is not.

提交回复
热议问题