通常的assert_eq!宏要求在结构中实现 PartialEq - 我有一个特征对象向量 ,Vec<Box<dyn Element>>其中 Element 是需要调试的特征,pub trait Element: std::fmt::Debug。我不能类似地要求,PartialEq因为它需要 Self 作为类型参数,编译器无法将其制作成特征对象。
我见过的解决方案涉及在特征定义中要求一个 eq 关联函数,这对我来说没有吸引力,因为这只是调试代码,而且我认为包含一个无用的方法不会有什么好处并且在构建之外添加特征的 API 可能会造成混淆cargo test。
是否有任何其他(可能不安全)的方法来比较两个特征对象?
最有可能的是,您应该仅出于调试目的而实现您需要的任何内容。检查条件编译宏。
不管怎样,既然你已经知道它们是Debug绑定的,你可以尝试用它作为比较。当然,您需要对其进行适当的定制。
fn compare_elements_by_debug_fmt<T>(e1: &T, e2: &T) -> std::cmp::Ordering
where
T: Debug,
{
format!("{:?}", e1).cmp(&format!("{:?}", e2))
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
975 次 |
| 最近记录: |