Enums 无法移出';Rc';

Enums 无法移出';Rc';,enums,rust,traits,Enums,Rust,Traits,使用Rc trait对象的单位变量在枚举上派生PartialEq似乎会触发无法移出“Rc”错误 我已经能够创建一个复制错误的小代码示例。有没有一种方法可以在不为枚举手动实现PartialEq的情况下修复错误?这在代码库中的5个位置发生 代码示例: use failure::Error; use serde_derive::{Deserialize,Serialize}; use std::rc::Rc; trait MyTrait { } impl PartialEq for MyTrait

使用Rc trait对象的单位变量在枚举上派生PartialEq似乎会触发
无法移出“Rc”错误

我已经能够创建一个复制错误的小代码示例。有没有一种方法可以在不为枚举手动实现PartialEq的情况下修复错误?这在代码库中的5个位置发生

代码示例:

use failure::Error;
use serde_derive::{Deserialize,Serialize};
use std::rc::Rc;

trait MyTrait {
}

impl PartialEq for MyTrait {
    fn eq(&self, rhs: &Self) -> bool {
        true
    }
}

impl MyTrait for String {
}

#[derive(PartialEq)]
enum MyEnum {
    A,
    B(Rc<dyn MyTrait>),
}

fn main() -> Result<(), Error> {
    println!("{}",MyEnum::A == MyEnum::B(Rc::new(String::from("whee"))));
    Ok(())
}
这里有一个问题的链接:


所以现在这可能只是一个语言错误。手动为所有枚举实现PartialEq这是一个目前不可行的问题,因此我想知道是否有解决办法。

作为一个解决办法,似乎可以像
Rc
()
#[inline]
fn eq(&self, other: &MyEnum) -> bool {
    {
        let __self_vi =
            unsafe { ::std::intrinsics::discriminant_value(&*self) } as
                isize;
        let __arg_1_vi =
            unsafe { ::std::intrinsics::discriminant_value(&*other) } as
                isize;
        if true && __self_vi == __arg_1_vi {
            match (&*self, &*other) {
                (&MyEnum::B(ref __self_0), &MyEnum::B(ref __arg_1_0)) =>
                (*__self_0) == (*__arg_1_0),
                _ => true,
            }
        } else { false }
    }
}