РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
485 of 1245 menu

Трейт Clone

Трейт Clone позволяет явно создавать глубокую копию значения. В отличие от трейта Copy, который работает неявно для простых типов, Clone требует явного вызова метода clone. Это полезно, когда нужно сохранить исходное значение и при этом получить его независимую копию. Параметров метод clone не принимает, а возвращает новое значение того же типа.

Синтаксис

value.clone()

Пример

Давайте склонируем строку "abcde" и убедимся, что оригинал остался доступен:

fn main() { let original = String::from("abcde"); let cloned = original.clone(); println!("{}", original); println!("{}", cloned); }

Результат выполнения кода:

"abcde" "abcde"

Пример

Давайте склонируем вектор и изменим копию, чтобы убедиться в независимости данных:

fn main() { let mut original = vec![1, 2, 3, 4, 5]; let mut cloned = original.clone(); cloned.push(6); println!("{:?}", original); println!("{:?}", cloned); }

Результат выполнения кода:

[1, 2, 3, 4, 5] [1, 2, 3, 4, 5, 6]

Пример

Давайте реализуем трейт Clone для собственной структуры:

#[derive(Clone)] struct Point { x: i32, y: i32, } fn main() { let p1 = Point { x: 1, y: 2 }; let p2 = p1.clone(); println!("{} {}", p1.x, p1.y); println!("{} {}", p2.x, p2.y); }

Результат выполнения кода:

1 2 1 2

Смотрите также

  • трейт Copy,
    который позволяет неявное копирование простых типов
  • метод clone,
    который создаёт копию значения
  • трейт Ownership,
    который описывает систему владения в Rust
  • оператор move,
    который перемещает владение значением
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить