#cmp #hash #any

any_cmp

支持动态类型比较

6 个版本 (3 个重大更改)

0.4.1 2024年1月14日
0.4.0 2023年11月5日
0.3.0 2023年10月30日
0.2.0 2023年9月6日
0.1.1 2023年9月5日

#1168 in Rust 模式

MIT/Apache

21KB
549

any_cmp

支持动态类型比较。

此包的作者英语能力不佳。
如果文档难以阅读,请见谅。

这是什么?

此包提供可比较的特性和动态类型。

主要包括以下内容。

名称 摘要
AnyEq 类似于 std::cmp::Eq
AnyHash 类似于 std::hash::Hash
AnyOrd 类似于 std::cmp::Ord
AnyPartialEq 类似于 std::cmp::PartialEq
AnyPartialOrd 类似于 std::cmp::PartialOrd
ObjHash 结合 AnyEqAnyHash 的特性。

示例

这里有一个简单但无用的示例。

let x = &42 as &dyn AnyEq;
let y = &42 as &dyn AnyEq;
let z = &"42" as &dyn AnyEq;
assert!(x == y);
assert!(x != z);

这里有一个使用动态类型作为 HashMap 键的示例。

let mut map = HashMap::<Box<dyn ObjHash>, String>::new();
map.insert(Box::new(false), "bool".to_string());
map.insert(Box::new(0), "int".to_string());
map.insert(Box::new(""), "string".to_string());

assert_eq!(map[&false as &dyn ObjHash], "bool");
assert_eq!(map[&0 as &dyn ObjHash], "int");
assert_eq!(map[&"" as &dyn ObjHash], "string");

新功能

v0.4.1

  • 小重构。

v0.4.0

  • 修复遗忘的实现。
  • 添加 box 升级方法(例如 as_any_eq_box)。

v0.3.0

  • 在几个位置添加了 must_use 注释。

v0.2.0

  • 模块 upcast 规范略有变化。

无运行时依赖