如何在 Rust 中克隆 Rc 的选项?

Psi*_*dom 4 clone rust

假设我有一个 Rc 选项:

let x = Some(Rc::new(3));
Run Code Online (Sandbox Code Playgroud)

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

let y = Some(Rc::clone(&x.unwrap()));
Run Code Online (Sandbox Code Playgroud)

但似乎也有一条捷径:

let y = x.clone();
Run Code Online (Sandbox Code Playgroud)

这些选项之间有什么区别吗?或者他们在内部做同样的事情。Rust 新手,感谢您的澄清。

SCa*_*lla 6

有一个通用的实现

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

所以如果xOption<Rc<T>>x.clone()就干脆顺从上Clone执行了Rc<T>