Clone
Иногда вы хотите сделать копию значения. Для этого служит трейт Clone.
// Copyright 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0
fn say_hello(name: String) {
println!("{name}, привет!")
}
fn main() {
let name = String::from("Алиса");
say_hello(name.clone());
say_hello(name);
}
This slide should take about 2 minutes.
-
Идея
Cloneв том, чтобы было легко заметить места, где происходят выделения памяти в куче. Ищите.clone()и несколько других, напримерvec!илиBox::new. -
Обычное дело — «клонировать свой путь» через проблемы с анализатором заимствований, а потом возвращаться, чтобы попытаться оптимизировать эти клоны.
-
cloneобычно выполняет глубокое копирование значения, то есть если, например, клонировать массив, клонируются и все его элементы. -
Поведение
cloneзадаёт пользователь, поэтому при необходимости он может выполнять собственную логику клонирования.