Rust 断言特征对象的相等性?

Rust 断言特征对象的相等性?,rust,equality,trait-objects,Rust,Equality,Trait Objects,通常的assert\u eq宏要求跨结构实现PartialEq-我有一个trait对象向量,Vec,其中元素是需要调试的trait,发布trait元素:std::fmt::Debug。我不能同样要求PartialEq,因为它需要Self作为类型参数,编译器无法将其转换为trait对象 我看到的解决方案包括在trait定义中需要一个与eq相关的函数,这对我没有吸引力,因为这只是调试代码,我认为在货物测试构建之外,在trait的API中添加一个无用且可能令人困惑的方法是没有好处的 有没有其他(可能不

通常的
assert\u eq宏要求跨结构实现PartialEq-我有一个trait对象向量,
Vec
,其中元素是需要调试的trait,
发布trait元素:std::fmt::Debug
。我不能同样要求
PartialEq
,因为它需要Self作为类型参数,编译器无法将其转换为trait对象

我看到的解决方案包括在trait定义中需要一个与eq相关的函数,这对我没有吸引力,因为这只是调试代码,我认为在
货物测试
构建之外,在trait的API中添加一个无用且可能令人困惑的方法是没有好处的


有没有其他(可能不安全的)方法来比较两个trait对象?

最有可能的是,为了调试目的,您应该实现您需要的任何东西。检查

无论如何,因为您已经知道它们是
Debug
绑定的,所以可以尝试将其用作比较。当然,您需要适当地调整它

fn通过调试fmt(e1:&T,e2:&T)比较元素-->std::cmp::排序
哪里
T:调试,
{
格式!(“{:?}”,e1).cmp(&format!(“{:?}”,e2))
}

不知何故,您需要解决如何将
MyElement
YourElement
进行比较的问题——如果比较
Debug
输出就足够了,这很好,但在大多数情况下,比较不同类型的值是有意义的,你会想要一些更类似于链接问题的东西。