假设我有以下枚举

enum MyEnum {
  VariantA,
  VariantB,
  VariantC,
}

通过这样做,我可以得出整个枚举的PartialEq特征
#[derive(PartialEq)]
enum MyEnum {
  VariantA,
  VariantB,
  VariantC,
}

我想做的是派生特征,但仅适用于特定的变体而不是整个枚举。那可能吗? (或者甚至有意义吗?)。

最佳答案

假设您有一个类似的设置:

#[derive(PartialEq)]
struct VarB{
    pub value: u32,
}

#[derive(PartialEq)]
enum MyEnum{
    VarA(VarA),
    VarB(VarB)
}

VarA来自不同的 crate ,由于没有派生PartialEq(或任何其他外部特征),因此无法编译。

您可以使用newtype模式解决此问题(假设您有权访问relevent字段/访问器)
struct MyVarA(VarA);

impl PartialEq for MyVarA{
    fn eq(&self, other: &MyVarA) -> bool {
        self.0.value == other.0.value
    }

    fn ne(&self, other: &MyVarA) -> bool {
        self.0.value != other.0.value
    }
}

#[derive(PartialEq)]
struct VarB{
    value: u32,
}

#[derive(PartialEq)]
enum MyEnum{
    VarA(MyVarA),
    VarB(VarB)
}

更多信息:
https://doc.rust-lang.org/rust-by-example/generics/new_types.html

10-04 10:37