如何在 Rust 中克隆选项<Rc<_>>?

问题描述 投票:0回答:2

假设我有

Option
Rc
:

let x = Some(Rc::new(3));

如果我需要克隆,我可以这样做:

let y = Some(Rc::clone(&x.unwrap()));

但似乎还有捷径:

let y = x.clone();

这些选项有什么区别吗?或者他们内部也在做同样的事情?

rust clone
2个回答
18
投票

有一个通用实现

impl<T: Clone> Clone for Option<T> {
    #[inline]
    fn clone(&self) -> Self {
        match self {
            Some(x) => Some(x.clone()),
            None => None,
        }
    }
    // ...
}

因此,如果

x
Option<Rc<T>>
,则
x.clone()
将简单地遵循
Clone
上的
Rc<T>
实现。


0
投票

这些选项有什么区别吗?

x
None
时有区别。

使用

let y = Some(Rc::clone(&x.unwrap()));
它将出现恐慌,而使用
let y = x.clone();
则会将
None
分配给
y

x
Some
时,确实没有区别。

因此,除非您明确希望它在

x
None
时出现恐慌,否则建议使用第二个选项,这样更简洁。

© www.soinside.com 2019 - 2024. All rights reserved.