#pointers #identity #values #equality #value #address

pointer-identity

将类型指针地址视为标识符而不是值的包装类型

2 个版本

0.1.1 2023 年 11 月 21 日
0.1.0 2023 年 11 月 17 日

#2184 in Rust 模式

MIT 许可证

9KB
114

指针标识符

此软件包提供了一种包装类型,您可以使用它来更改值的比较和散列方式。

标识符

Rust 有一组操作值的特性

  • OrdPartialOrd 检查值的顺序,
  • EqPartialEq 检查值的相等性,
  • Hash 计算值的哈希总和。

这些操作在数据的 上进行。例如,两个字符串 "Hello""Hello" 将被视为相同,即使它们存在于内存的不同位置

let left = String::from("Hello");
let right = String::from("Hello");
assert_eq!(left, right);

当在 Rust 中使用智能指针,如 ArcRcBox 时,这些将向底层类型转发实现。一般来说,这是合理的,也是预期的行为。

然而,在某些情况下,这可能不是您所需要的。例如,在某些具有引用计数值缓存的情况下,您可能只想通过查看其指针地址而不是检查值来确定两个值是否相同。

此软件包通过提供包装类型 PointerIdentity 来让您实现这一点,您可以使用它来包装任何实现了 Pointer 的值,使其在比较和散列时使用指针地址作为标识符,而不是它所持有的数据的值。

许可证

MIT。

依赖项

~220KB