Метод clone
Метод clone создает и возвращает глубокую копию значения. Он позволяет получить независимый экземпляр данных, который можно использовать отдельно от оригинала. Это особенно полезно, когда тип не реализует трейт Copy, и при присваивании или передаче в функцию происходит перемещение владения. Параметром метод не принимает никаких значений, а вызывается у самого объекта.
Синтаксис
value.clone()
Пример
Давайте создадим строку, клонируем ее, а затем изменим оригинал, чтобы убедиться, что копия осталась неизменной:
fn main()
{
let mut original = String::from("abcde");
let cloned = original.clone();
original.push_str("12345");
println!("Original: {}", original);
println!("Cloned: {}", cloned);
}
Результат выполнения кода:
Original: abcde12345
Cloned: abcde
Пример
Давайте склонируем вектор и изменим оригинал, добавив в него новый элемент:
fn main()
{
let mut vec1 = vec![1, 2, 3, 4, 5];
let vec2 = vec1.clone();
vec1.push(6);
println!("Original: {:?}", vec1);
println!("Cloned: {:?}", vec2);
}
Результат выполнения кода:
Original: [1, 2, 3, 4, 5, 6]
Cloned: [1, 2, 3, 4, 5]