在带有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这是一个问题,目前尚不可行,因此,我想知道是否有解决方法。