Как клонировать опцию Rc в Rust? - PullRequest
1 голос
/ 02 ноября 2019

Скажем, у меня есть опция Rc:

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

Если мне нужно сделать клон, я могу сделать:

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

Но, похоже, есть и короткий путь:

let y = x.clone();

Есть ли разница между этими параметрами? Или они внутренне делают то же самое. Руст новичок здесь, спасибо за любые разъяснения.

1 Ответ

2 голосов
/ 02 ноября 2019

Существует универсальная реализация

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>.

...