Clone

گاهی اوقات شما می‌خواهید یک نسخه از مقدار بسازید. ویژگی Clone این کار را انجام می‌دهد.

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 این است که شناسایی مکان‌های تخصیص حافظه heap آسان‌تر شود. به دنبال ()clone. و چند مورد دیگر مانند !vec یا Box::new بگردید.

  • معمولاً برای حل مشکلات مربوط به بررسی‌کننده قرض‌گیری (borrow checker) از کپی کردن استفاده می‌شود و سپس در آینده تلاش می‌شود تا آن کپی‌ها بهینه‌سازی شوند.

  • clone معمولاً یک کپی عمیق از مقدار را انجام می‌دهد، به این معنی که اگر به عنوان مثال یک آرایه را کپی کنید، تمام عناصر آن آرایه نیز کپی خواهند شد.

  • رفتار clone توسط کاربر تعریف می‌شود، بنابراین می‌تواند در صورت نیاز، منطق کپی‌برداری سفارشی را اجرا کند.