Rust 如何为枚举实现PartialEq?

Rust 如何为枚举实现PartialEq?,rust,Rust,我有以下定义: enum Either<T, U> { Left(T), Right(U), } 这会同时消耗*self和*other,即使我只在匹配表达式中需要它,也会导致以下错误: 错误[E0507]:无法移出借用的内容 -->src/lib.rs:9:16 | 9 |匹配(*自身,*其他){ |^^^^无法移出借用的内容 错误[E0507]:无法移出借用的内容 -->src/lib.rs:9:23 | 9 |匹配(*自身,*其他){ |^^^^^无法移出借用的

我有以下定义:

enum Either<T, U> {
    Left(T),
    Right(U),
}
这会同时消耗
*self
*other
,即使我只在
匹配
表达式中需要它,也会导致以下错误:

错误[E0507]:无法移出借用的内容
-->src/lib.rs:9:16
|
9 |匹配(*自身,*其他){
|^^^^无法移出借用的内容
错误[E0507]:无法移出借用的内容
-->src/lib.rs:9:23
|
9 |匹配(*自身,*其他){
|^^^^^无法移出借用的内容

通常,您只需使用
#[派生(PartialEq)]
,如下所示:

#[derive(PartialEq)]
enum Either<T, U> {
    Left(T),
    Right(U),
}

通常,您只需使用
#[派生(PartialEq)]
,如下所示:

#[derive(PartialEq)]
enum Either<T, U> {
    Left(T),
    Right(U),
}

为什么没有实现
#[派生(PartialEq)]
?@starblue你是什么意思?据我所知,
#[派生(PartialEq)]
直接从编译器生成LLVM,因此没有需要检查的锈迹代码。我想创建一个impl,尽可能多地生成相同的输出,作为修改的基础。它生成锈迹代码,您只是看不到它,因为它发生在编译过程中,而不是在源代码中。为什么
#[派生(PartialEq)]
implemented?@starblue你是什么意思?据我所知,
#[派生(PartialEq)]
直接从编译器生成LLVM,因此没有需要检查的锈迹代码。我想创建一个impl,尽可能生成相同的输出,作为修改的基础。它生成锈迹代码,您只是看不到它,因为它发生在编译期间,而不是源代码中。
impl<T: PartialEq, U: PartialEq> PartialEq for Either<T, U> {
    fn eq(&self, other: &Self) -> bool {
        use Either::*;

        match (self, other) {
            (&Left(ref a), &Left(ref b)) => a == b,
            (&Right(ref a), &Right(ref b)) => a == b,
            _ => false,
        }
    }
}
impl<T: PartialEq, U: PartialEq> PartialEq for Either<T, U> {
    fn eq(&self, other: &Self) -> bool {
        use Either::*;
        match (self, other) {
            (Left(a), Left(b)) => a == b,
            (Right(a), Right(b)) => a == b,
            _ => false,
        }
    }
}