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.
相关产品推荐
相关产品推荐

