Özet - Interior mutability
- Rust kursu
- Orta seviye
- Ders 41/115
- 5 dk
Rc<RefCell<T>> ile bir grafik kenar listesi yazarsın.
Interior mutability özeti
İç değiştirilebilirlik, &T arkasındaki veriyi güvenle değiştirmeyi sağlar. Cell<T>: Copy değerler için get/set, panic yok. RefCell<T>: çalışma anında denetlenen borrow/borrow_mut, ihlalde panic. Rc<RefCell<T>>: paylaşımlı ve değiştirilebilir veri. Weak: döngüleri önleyen sahip olmayan bağlantı. Thread'ler arasında karşılıkları Mutex, RwLock ve atomik türlerdir.
Paylaşılan hesap
İki sahip aynı bakiyeyi değiştirir; bir de değeri canlı tutmayan zayıf bir bağlantı vardır:
let hesap = Rc::new(RefCell::new(100));
let kopya = Rc::clone(&hesap);
*kopya.borrow_mut() -= 30;
let zayif = Rc::downgrade(&hesap);
println!("{} {} {}",
hesap.borrow(),
Rc::strong_count(&hesap),
Rc::weak_count(&hesap)); // 70 2 1Uygulama Ortak bakiye
Yukarıdaki örneği yaz: Rc::new(RefCell::new(100)), bir kopya üzerinden 30 düş, Rc::downgrade ile zayıf bağlantı al. Bakiyeyi, strong_count ve weak_count değerlerini boşlukla yazdır.
Başlangıç kodu
use std::cell::RefCell;
use std::rc::Rc;
fn main() {
// buraya yaz
}Örnek çözüm
use std::cell::RefCell;
use std::rc::Rc;
fn main() {
let hesap = Rc::new(RefCell::new(100));
let kopya = Rc::clone(&hesap);
*kopya.borrow_mut() -= 30;
let _zayif = Rc::downgrade(&hesap);
println!("{} {} {}", hesap.borrow(), Rc::strong_count(&hesap), Rc::weak_count(&hesap));
}Beklenen çıktı
70 2 1
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>Rc::weak_count</code> neyi sayar?
- Rc::downgrade ile oluşturulan Weak işaretçileri Doğru cevap
- Tüm sahipleri
- Bırakılmış kopyaları
- Ödünçleri
Açıklama: Weak işaretçiler değeri canlı tutmaz; değer yalnızca strong_count sıfıra inince bırakılır.
2 Zayıf bağlantı
let zayif = Rc::____(&hesap);
let zayif = Rc::downgrade(&hesap);
Açıklama: Rc::downgrade sahip olmayan bir Weak işaretçi üretir.
3 Grubun özeti
| Kavram | Anlamı |
|---|---|
Cell<T> |
Copy değer, panic yok |
RefCell<T> |
Çalışma anı ödünç |
Rc<RefCell<T>> |
Ortak ve değişken |
Weak<T> |
Döngü önler |