Clone

Іноді вам необхідно зробити копію значення. Для цього призначений крейт Clone.

fn say_hello(name: String) {
    println!("Привіт {name}")
}

fn main() {
    let name = String::from("Alice");
    say_hello(name.clone());
    say_hello(name);
}
This slide should take about 2 minutes.
  • Ідея Clone полягає у тому, щоб полегшити виявлення місць, де відбувається виділення пам'яті у купі. Шукайте .clone() та деякі інші, такі як vec! або Box::new.

  • Зазвичай, ви "клонуєте свій вихід" з проблем з перевіркою позик, а потім повертаєтесь пізніше, щоб спробувати оптимізувати ці клони.

  • clone зазвичай виконує глибоку копію значення, тобто якщо ви, наприклад, клонуєте масив, то всі елементи масиву також будуть клоновані.

  • Поведінка функції clone визначається користувачем, тому вона може виконувати власну логіку клонування, якщо це необхідно.