self parametresi
- Rust kursu
- Başlangıç
- Ders 72/115
- 4 dk
&self ile metotları çağırmayı ve alanlara erişmeyi öğrenirsin.
self parametresi
self üç biçimde alınabilir ve her biri farklı bir sözleşmedir:
&self— okur; en yaygını.&mut self— değiştirir.self— örneği tüketir; çağrıdan sonra örnek kullanılamaz.
impl Kutu {
fn kapsar(&self, d: &Kutu) -> bool {
self.en > d.en && self.boy > d.boy
}
fn ozet(self) -> String {
format!("{}x{}", self.en, self.boy)
}
}Ek parametreler
self'ten sonra normal parametreler gelir. Başka bir örneği okumak için o da referansla alınır:
let buyuk = Kutu { en: 8, boy: 6 };
let kucuk = Kutu { en: 3, boy: 4 };
println!("{}", buyuk.kapsar(&kucuk)); // true
println!("{}", kucuk.kapsar(&buyuk)); // falseMetot adları alan adlarıyla aynı olabilir: k.en alanı, k.en() ise metodu çağırır. Bu, getter yazmanın yaygın yoludur.
Uygulama Kapsama kontrolü
impl Kutu içinde fn kapsar(&self, d: &Kutu) -> bool yaz: hem eni hem boyu büyükse true. a = Kutu { en: 8, boy: 6 }, b = Kutu { en: 3, boy: 4 } için a.kapsar(&b) ve b.kapsar(&a) sonuçlarını yazdır.
Başlangıç kodu
struct Kutu {
en: u32,
boy: u32,
}
fn main() {
// buraya yaz
}Örnek çözüm
struct Kutu {
en: u32,
boy: u32,
}
impl Kutu {
fn kapsar(&self, d: &Kutu) -> bool {
self.en > d.en && self.boy > d.boy
}
}
fn main() {
let a = Kutu { en: 8, boy: 6 };
let b = Kutu { en: 3, boy: 4 };
println!("{} {}", a.kapsar(&b), b.kapsar(&a));
}Beklenen çıktı
true false
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>let s = k.ozet();</code> sonrasında <code>k.alan()</code> çağrılabilir mi? (<code>fn ozet(self)</code>, Kutu Copy değil)
- Evet
- Yalnızca k mut ise
- ozet derlenmez
- Hayır: k ozet içine taşındı Doğru cevap
Açıklama: self alan metot sahipliği alır. Dönüştürme metotları (into_*, ozet) çoğunlukla böyledir.
2 Okuyan metot
fn kapsar(____, d: &Kutu) -> bool {
self.en > d.en && self.boy > d.boy
}
fn kapsar(&self, d: &Kutu) -> bool {
self.en > d.en && self.boy > d.boy
}
Açıklama: Yalnızca okuyan metot &self alır; örnek çağrıdan sonra da kullanılabilir.
3 İmza ve etkisi
| Kavram | Anlamı |
|---|---|
fn f(&self) |
Okur |
fn f(&mut self) |
Değiştirir |
fn f(self) |
Tüketir |
fn f() |
İlişkili fonksiyon |