You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中如何在类型参数T实现PartialEq时比较泛型结构体

解决方法

你要的效果在Rust里有两种实现方式,都完全符合「当且仅当内部T实现PartialEq时,Foobar<T>可进行相等比较」的需求,和Vec的行为完全一致:

方式1:派生PartialEq(最常用)

直接给结构体加#[derive(PartialEq)]即可,编译器自动生成的实现会自动为T添加PartialEq约束,不会强制所有泛型实例都支持比较:

#[derive(PartialEq)]
struct Foobar<T> {
    foobar: T
}

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

如果同时需要Eq trait,在派生列表里加上Eq即可,同样只有当T实现Eq时,Foobar<T>才会实现Eq。

方式2:手动实现PartialEq

如果需要自定义比较逻辑,可以手动写trait实现,显式添加T: PartialEq约束即可:

struct Foobar<T> {
    foobar: T
}

impl<T: PartialEq> PartialEq for Foobar<T> {
    fn eq(&self, other: &Self) -> bool {
        // 这里可以写自定义比较逻辑,默认和派生行为一致直接比较内部字段即可
        self.foobar == other.foobar
    }
}

如果需要配套实现Eq,添加如下实现即可:

impl<T: Eq> Eq for Foobar<T> {}

内容的提问来源于stack exchange,提问作者vidstige

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:36:02