首页 > 解决方案 > 如果实现了 partialeq,则比较结构

问题描述

如果类型参数T实现,我如何比较泛型结构PartialEq?我尝试了以下方法,但无法编译。我知道我可以只做Foobar<T>派生Eq等等,但是是否有可能Foobar“继承”或以PartialEq某种方式获取T?我猜这样的东西已经为 了Vec,例如你可以比较Vecs 当且仅当Timplements PartialEq

struct Foobar<T> {
    foobar: T
}

fn x() -> bool {
    let a = Foobar{foobar: 1};
    let b = Foobar{foobar: 2};
    a == b
}

标签: rust

解决方案


关于Vec<_>滚动其文档以查看是否有用,有一个trait 实现Eq可以随心所欲地传播。

impl<T, A> Eq for Vec<T, A> where
    T: Eq,
    A: Allocator, 

所以你需要做同样的事情:

struct Foobar<T> {
    foobar: T
}

impl<T> PartialEq for Foobar<T> where T: PartialEq {
    fn eq(&self, other: &Self) -> bool {
        self.foobar == other.foobar
    }
}
impl<T> Eq for Foobar<T> where T: Eq {}

fn x() -> bool {
    let a = Foobar{foobar: 1};
    let b = Foobar{foobar: 2};
    a == b
}

fn main() {
    println!("{}", x()); // false
}


推荐阅读