CodeBlanks Logo Icon CodeBlanks

Özet - Interior mutability

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 1

Uygulama 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

main.rs
use std::cell::RefCell;
use std::rc::Rc;

fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
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ı

Soru
let zayif = Rc::____(&hesap);
Cevap
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

Orta seviye bölümündeki tüm dersler