You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中是否存在类似Cow的内置枚举以表示Arc或Weak?

Rust中是否有内置的Arc<T>/Weak<T>二选一枚举?

Rust标准库没有提供内置枚举来同时容纳Arc<T>或Weak<T>,你需要自行定义这类枚举。

这种模式虽在特定场景下实用,但属于相对小众的需求,因此未被纳入标准库。你可以基于自己的伪代码实现,还能扩展一些实用方法让它更易用,示例如下:

use std::sync::{Arc, Weak};

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

impl<T> MaybeWeak<T> {
    // 尝试获取强引用,Weak升级失败则返回None
    pub fn try_upgrade(&self) -> Option<Arc<T>> {
        match self {
            MaybeWeak::Strong(a) => Some(a.clone()),
            MaybeWeak::Weak(w) => w.upgrade(),
        }
    }

    // 从Arc直接构造MaybeWeak
    pub fn from_strong(arc: Arc<T>) -> Self {
        MaybeWeak::Strong(arc)
    }

    // 从Weak直接构造MaybeWeak
    pub fn from_weak(weak: Weak<T>) -> Self {
        MaybeWeak::Weak(weak)
    }
}

// 允许从Arc直接转换为MaybeWeak
impl<T> From<Arc<T>> for MaybeWeak<T> {
    fn from(arc: Arc<T>) -> Self {
        MaybeWeak::Strong(arc)
    }
}

// 允许从Weak直接转换为MaybeWeak
impl<T> From<Weak<T>> for MaybeWeak<T> {
    fn from(weak: Weak<T>) -> Self {
        MaybeWeak::Weak(weak)
    }
}

自定义枚举的优势在于能根据业务需求灵活扩展,比如添加is_strong、is_weak判断方法,或是实现Deref trait直接访问内部值(需注意Weak的处理逻辑)。

内容的提问来源于stack exchange,提问作者A.Z.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:22:38