无法移出“ Rc”

时间:2019-05-09 01:08:05

标签: enums rust traits

在带有Rc特征对象的单元变体的枚举上派生PartialEq似乎会触发Cannot move out of an '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:

#[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 }
    }
}

这是问题的链接: https://github.com/rust-lang/rust/issues/31740

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

0 个答案:

没有答案