得出特定变体的性状

Oma*_*bid 2 enums traits rust

假设我有以下枚举

enum MyEnum {
  VariantA,
  VariantB,
  VariantC,
}
Run Code Online (Sandbox Code Playgroud)

通过这样做,我可以得出整个枚举的PartialEq特征

#[derive(PartialEq)]
enum MyEnum {
  VariantA,
  VariantB,
  VariantC,
}
Run Code Online (Sandbox Code Playgroud)

我想做的是导出特征,但仅针对特定的变体而不是整个枚举。那可能吗?(或者甚至有意义吗?)。

小智 5

假设您有如下设置:

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

#[derive(PartialEq)]
enum MyEnum{
    VarA(VarA),
    VarB(VarB)
}
Run Code Online (Sandbox Code Playgroud)

VarA来自不同的板条箱,由于没有派生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)
}
Run Code Online (Sandbox Code Playgroud)

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