crate ve super
- Rust kursu
- Orta seviye
- Ders 75/115
- 4 dk
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
fn main() {
// buraya yaz
}Örnek çözüm
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
pub fn f() -> i32 {
____::ortak() + crate::kok()
}
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 |