1 个不稳定版本
0.1.0 | 2023 年 7 月 6 日 |
---|
#2478 在 Rust 模式
6KB
免责声明
这是我发布的第一个 crate,因此我对将其制作成生产就绪版本尚无经验。因此请谨慎使用此 crate,并欢迎反馈。
partial_eq_dyn
使用显式转换实现 DynPartialEq trait,以启用任何 dyn 对象之间的比较。还有一个相关的 derive crate partial_eq_dyn_derive,它推导出部分 Equal 和使用 dyn_eq 的所有 dyn_objects 的分组件实现。只需将 AsAny 和 DynPartialEq 设置为所有要使用的 traits 的超 traits,然后对包含这些 traits 的所有要比较的类型使用 PartialEqDyn derive。AsAny 和 DynPartialEq 也可以自动推导。
例如,AsAny 可以这样实现。
use std::any::Any;
use partial_eq_dyn::AsAny;
struct Test;
impl AsAny for Test{
fn as_any(&self) -> &dyn Any {
self
}
}
let test_any: &dyn Any = Test.as_any();
DynPartialEq 可以这样实现
use std::any::Any;
use partial_eq_dyn::{DynPartialEq, AsAny};
trait TestTrait: DynPartialEq + AsAny{}
#[derive(PartialEq)]
struct Test;
impl TestTrait for Test{}
impl AsAny for Test{
fn as_any(&self) -> &dyn Any {
self
}
}
impl DynPartialEq for Test{
fn dyn_eq(&self, other: &dyn Any) -> bool {
other
.downcast_ref::<Test>()
.map_or(false, |other| self == other)
}
}