假设我有一个 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 新手,感谢您的澄清。
有一个通用的实现
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)
所以如果x是Option<Rc<T>>,x.clone()就干脆顺从上Clone执行了Rc<T>。