Rust 派生PartialEq时,无法移出包含装箱特征对象的枚举上的借用内容
我正在尝试编写一个枚举派生Rust 派生PartialEq时,无法移出包含装箱特征对象的枚举上的借用内容,rust,ownership,ownership-semantics,Rust,Ownership,Ownership Semantics,我正在尝试编写一个枚举派生PartialEq,其中包含一个trait对象,该对象可以手动执行此操作。我使用该解决方案是为了迫使Trait的实现者编写一个相等方法。这无法编译: trait Trait { fn partial_eq(&self, rhs: &Box<Trait>) -> bool; } impl PartialEq for Box<Trait> { fn eq(&self, rhs: &Box<
PartialEq
,其中包含一个trait对象,该对象可以手动执行此操作。我使用该解决方案是为了迫使Trait
的实现者编写一个相等方法。这无法编译:
trait Trait {
fn partial_eq(&self, rhs: &Box<Trait>) -> bool;
}
impl PartialEq for Box<Trait> {
fn eq(&self, rhs: &Box<Trait>) -> bool {
self.partial_eq(rhs)
}
}
#[derive(PartialEq)]
enum Enum {
Trait(Box<Trait>),
}
trait{
fn部分均衡器(&self,rhs:&Box)->bool;
}
框的impl PartialEq{
fn均衡器(&self,rhs:&Box)->bool{
自身部分均衡(rhs)
}
}
#[衍生(部分)]
枚举枚举{
特征(框),
}
错误[E0507]:无法移出借用的内容
-->src/main.rs:13:11
|
13 |特征(框),
|^^^^^^^^^^^^^^无法移出借用的内容
仅当我手动
impl PartialEq for Enum
时才编译此文件。为什么会出现这种情况?扩展自动派生的PartialEq实现会显示更好的错误消息:
impl ::std::cmp::PartialEq for Enum {
#[inline]
fn eq(&self, __arg_0: &Enum) -> bool {
match (&*self, &*__arg_0) {
(&Enum::Trait(ref __self_0), &Enum::Trait(ref __arg_1_0)) => {
true && (*__self_0) == (*__arg_1_0)
}
}
}
#[inline]
fn ne(&self, __arg_0: &Enum) -> bool {
match (&*self, &*__arg_0) {
(&Enum::Trait(ref __self_0), &Enum::Trait(ref __arg_1_0)) => {
false || (*__self_0) != (*__arg_1_0)
}
}
}
}
错误[E0507]:无法移出借用的内容
-->src/main.rs:21:40
|
21 | true&(*uuuu self_0)=(*uu arg_1_0)
|^^^^^^^^^^^^^^^^无法移出借用的内容
错误[E0507]:无法移出借用的内容
-->src/main.rs:29:41
|
29 |假| | |(*|u self_0)!=(*_arg_1_0)
|^^^^^^^^^^^^^^^^无法移出借用的内容
这被追踪为锈蚀问题和其他问题
您可能还需要自己为这种类型实现PartialEq
。您可能希望在部分eq
中使用&Trait
<代码>&Box
不需要双间接寻址。