断言特质对象是否相等?

5
通常的assert_eq!宏要求对于一个结构体实现PartialEq - 我有一个由trait对象组成的向量,Vec>,其中Element是需要Debug的特性,pub trait Element: std::fmt::Debug。我无法像这样要求PartialEq,因为它需要Self作为类型参数,编译器无法将其转换为特质对象。
我看到的解决方案涉及在特质定义中要求一个eq关联函数,但我不喜欢这个方法,因为这只是调试代码,我认为在cargo test构建之外包含一个可能是无用且潜在混淆的方法对特质API来说没有好处。
是否有其他(潜在的不安全)方法来比较两个特质对象?

你需要解决如何比较 MyElementYourElement 的问题——如果比较 Debug 输出足够了,那很好,但在大多数情况下,当比较不同类型的值时,你可能会想要使用更类似于链接问题中所找到的东西。 - trent
1个回答

4

很可能您只需要为调试目的实现您需要的内容。请查看条件编译宏

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

fn compare_elements_by_debug_fmt<T>(e1: &T, e2: &T) -> std::cmp::Ordering
where 
    T: Debug,
{
    format!("{:?}", e1).cmp(&format!("{:?}", e2))
}

沙盒


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接