rust 是否有一个内置的枚举表示一个Arc或Weak,类似于Cow?

ncecgwcz  于 2023-03-18  发布在  其他
关注(0)|答案(1)|浏览(149)

是否有一个内置的枚举可以包含Arc<T>Weak<T>,类似于Cow<T>可以包含一个拥有或借用的值?我已经使用过这种模式好几次了,我想知道我是否应该(内部)形式化我自己的枚举,或者它是否已经存在。
是否已经定义了类似于以下假 rust 的东西?

pub enum MaybeWeak<T> {
  Strong(Arc<T>),
  Weak(Weak<T>),
}

impl<T> MaybeWeak<T> {
  pub fn try_deref(&self) -> Option<Arc<T>> {
    match self {
      Strong(a) => Some(a.clone()),
      Weak(w) => w.upgrade(),
    }
}
5t7ly7z5

5t7ly7z51#

是的,有。它叫Weak
Arc(或Rc)并不表示“拥有”价值(即Box),而是一个共享值,你有一个共享引用。如果你不知道这个值是否存在,那就是Weak所表示的。你的MaybeWeak枚举没有多大意义。只要存储一个Weak,然后在它上面调用upgrade,当您想要访问该值时。
另一方面,与使用点操作符调用它相比,更喜欢完全限定的表示法Arc::clone(&ptr)Weak::upgrade(&ptr),以避免T具有同名方法时可能出现的错误。

相关问题