Struct ömürleri
- Rust kursu
- Orta seviye
- Ders 16/115
- 4 dk
Referans tutan struct'larda ömür parametresi kullanırsın.
Struct ömürleri
Bir struct referans tutuyorsa, alanın ömrü struct tanımında belirtilmelidir. Bu, "struct, gösterdiği veriden uzun yaşayamaz" demektir:
struct Alinti<'a> {
parca: &'a str,
}
let roman = String::from("Bir varmış. Bir yokmuş.");
let ilk = roman.split('.').next().unwrap();
let a = Alinti { parca: ilk };roman bırakılmadan önce a kullanılmayı bitirmelidir. Bu yaklaşım büyük metinleri kopyalamadan parçalara bölmek için kullanılır.
Ömürlü struct'a metot
impl bloğunda da ömür parametresi bildirilir. Bir metot struct'ın tuttuğu referansı döndürüyorsa 'a ile döndürmek, sonucun struct'tan bağımsız olarak kaynak kadar yaşamasını sağlar:
impl<'a> Alinti<'a> {
fn uzunluk(&self) -> usize {
self.parca.chars().count()
}
fn parca(&self) -> &'a str {
self.parca
}
}Uygulama Alıntı
Yukarıdaki Alinti<'a> struct'ını ve uzunluk, parca metotlarını yaz. "Bir varmış. Bir yokmuş." metninin ilk cümlesini (split('.')) alıntıla; parçayı ve karakter sayısını boşlukla yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
struct Alinti<'a> {
parca: &'a str,
}
impl<'a> Alinti<'a> {
fn uzunluk(&self) -> usize {
self.parca.chars().count()
}
fn parca(&self) -> &'a str {
self.parca
}
}
fn main() {
let roman = String::from("Bir varmış. Bir yokmuş.");
let ilk = roman.split('.').next().unwrap();
let a = Alinti { parca: ilk };
println!("{} {}", a.parca(), a.uzunluk());
}Beklenen çıktı
Bir varmış 10
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>struct Alinti { parca: &str }</code> (ömürsüz) yazılırsa ne olur?
- parca 'static olur
- Derlenir
- parca String olur
- E0106: ömür belirtilmeli Doğru cevap
Açıklama: Struct alanlarında ömür çıkarımı yapılmaz; ya <'a> eklenir ya da String gibi sahip olunan bir tür kullanılır.
2 Ömürlü alan
struct Alinti<'a> {
parca: ____,
}
struct Alinti<'a> {
parca: &'a str,
}
Açıklama: Referans alanı struct'ın ömür parametresiyle işaretlenir.
3 Tanım ve anlamı
| Kavram | Anlamı |
|---|---|
struct A<'a> { p: &'a str } |
Referans tutan struct |
impl<'a> A<'a> |
Ömürlü impl |
fn p(&self) -> &'a str |
Kaynağa bağlı dönüş |
struct B { p: String } |
Ömür gerekmez |