考虑到 std::cell::Ref
类型,它似乎基本上是一个指针。然而它没有实现Hash
,PartialEq
或者Eq
特质。这些特质没有被添加的根本原因是什么?
Ref
类型提供了 Deref
特性来进行比较,因此您可以简单地对其进行解引用以检查相等性。类似的类型如 MutexGuard
、RwLockReadGuard
和 RwLockWeiteGuard
也实现了 Deref
,但没有实现任何 Eq
、Hash
等特性。
已经有一些关于在这些类型上实现这些特性的讨论,但是没有一种方法是可行的。所以它们从未被实现。
MutexGuard<i32> == i32
这样的东西成为可能,但这可能是我们想要解决的问题。然而,添加这个功能将排除MutexGuard<i32> == MutexGuard<i32>
”。 - smitopRef<Foo>
,那么问题不大(只需在两种情况前面加上&
来进行解引用)。问题是当你有Vec<Ref<Foo>>
或Option<Ref<Foo>>
,或包含Ref<Foo>
的结构体时,就会有很多样板代码。 - Neil Mitchelloption
拥有一个as_deref()
方法。由于我很少使用Cell API
,因此无法清楚地看到明显的用例。 - Stargateur