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) کاربران را مجبور میکنند تا دادههای اصلی را نگه دارند. این میتواند برای ایجاد نمایههای سبک مفید باشد، اما معمولاً استفاده از آنها را تا حدی دشوارتر میکند.
- در صورت امکان، دادههای ساختارها را به طور مستقیم مالکیت کنید.
- برخی از ساختارهای داده که شامل چندین ارجاع هستند، ممکن است نیاز به چندین نشانهگذاری عمر داشته باشند. این امر میتواند ضروری باشد اگر بخواهید روابط عمری بین ارجاعات مختلف را به علاوه عمر ساختار خود توصیف کنید. این موارد بسیار پیشرفته هستند.