CodeBlanks Logo Icon CodeBlanks

crate ve super

crate ve super ile kökten veya üst modülden yola çıkarsın.

crate ve super

Yollar mutlak ya da göreli yazılabilir:

  • crate:: — crate kökünden başlayan mutlak yol.
  • super:: — bir üst modül (dosya sistemindeki .. gibi).
  • self:: — bulunulan modül.
fn kok() -> i32 { 10 }

mod a {
    pub fn ortak() -> i32 { 1 }

    pub mod b {
        pub fn f() -> i32 {
            super::ortak() + crate::kok()   // 1 + 10
        }
    }
}

Ne zaman hangisi?

Birbirine sıkı bağlı modüller arasında super:: kullanılır; kod birlikte taşındığında yollar bozulmaz. Projenin genelinden bir şey gerekiyorsa crate:: daha açıktır. use bildirimlerinde de aynı ön ekler geçerlidir:

mod rapor {
    use crate::ayarlar::Ayar;   // projenin başka yerinden
    use super::ortak_bicim;     // komşudan
}

Uygulama Göreli ve mutlak yollar

Yukarıdaki yapıyı yaz: kökte fn kok() -> i32 (10), mod a içinde ortak (1) ve pub mod b içinde super::ortak() + crate::kok() döndüren f. a::b::f() sonucunu yazdır.

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
fn kok() -> i32 {
    10
}

mod a {
    pub fn ortak() -> i32 {
        1
    }

    pub mod b {
        pub fn f() -> i32 {
            super::ortak() + crate::kok()
        }
    }
}

fn main() {
    println!("{}", a::b::f());
}

Beklenen çıktı

11

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir alt modül, üst modüldeki <code>pub</code> olmayan bir fonksiyonu <code>super::</code> ile çağırabilir mi?

  • Yalnızca crate:: ile
  • Yalnızca test modülünde
  • Evet; alt modüller atalarının gizli öğelerini görebilir Doğru cevap
  • Hayır

Açıklama: Gizlilik yukarıdan aşağıya değil, aşağıdan yukarıya serbesttir. Bu yüzden tests modülü use super::*; ile her şeye erişir.

2 Üst modül

Soru
pub fn f() -> i32 {
    ____::ortak() + crate::kok()
}
Cevap
pub fn f() -> i32 {
    super::ortak() + crate::kok()
}

Açıklama: super bir üst modülü gösterir.

3 Ön ek ve başlangıç noktası

Kavram Anlamı
crate:: Crate kökü
super:: Üst modül
self:: Bulunulan modül
std:: Standart kütüphane

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