Lifetimes in Data Structures

اگر یک تایپ داده داده‌های قرضی را ذخیره کند، باید با یک طول عمر مشخص شود:

#[derive(Debug)]
struct Highlight<'doc>(&'doc str);

fn erase(text: String) {
    println!("Bye {text}!");
}

fn main() {
    let text = String::from("The quick brown fox jumps over the lazy dog.");
    let fox = Highlight(&text[4..19]);
    let dog = Highlight(&text[35..43]);
    // erase(text);
    println!("{fox:?}");
    println!("{dog:?}");
}
This slide should take about 5 minutes.
  • در مثال بالا، حاشیه‌نویسی بر روی Highlight تضمین می‌کند که داده‌های زیرین str& به مدت حداقل برابر با هر نمونه از Highlight که از آن داده استفاده می‌کند، زنده بماند.
  • اگر text قبل از پایان عمر fox (یا dog) مصرف شود، بررسی‌کننده‌ی قرض (borrow checker) خطا می‌دهد.
  • تایپ‌های دارای داده‌های قرضی (borrowed data) کاربران را مجبور می‌کنند تا داده‌های اصلی را نگه دارند. این می‌تواند برای ایجاد نمایه‌های سبک مفید باشد، اما معمولاً استفاده از آنها را تا حدی دشوارتر می‌کند.
  • در صورت امکان، داده‌های ساختارها را به طور مستقیم مالکیت کنید.
  • برخی از ساختارهای داده که شامل چندین ارجاع هستند، ممکن است نیاز به چندین نشانه‌گذاری عمر داشته باشند. این امر می‌تواند ضروری باشد اگر بخواهید روابط عمری بین ارجاعات مختلف را به علاوه عمر ساختار خود توصیف کنید. این موارد بسیار پیشرفته هستند.