Associated constant
- Rust kursu
- İleri seviye
- Ders 61/81
- 4 dk
İlişkili sabit (associated constant) tanımlarsın.
Associated constant
Trait'ler sabit de bildirebilir; her uygulama kendi değerini verir. Değerler derleme anında bilinir ve tür üzerinden erişilir:
trait Cokgen {
const KENAR: u32;
const AD: &'static str;
}
struct Ucgen;
impl Cokgen for Ucgen {
const KENAR: u32 = 3;
const AD: &'static str = "üçgen";
}
fn ozet<T: Cokgen>() -> String {
format!("{}: {} kenar", T::AD, T::KENAR)
}Sabitin varsayılan değeri de olabilir: const AZAMI: usize = 64;.
Kullanım örnekleri
Standart kütüphanede: u32::MAX, f64::EPSILON, char::MAX. Kendi kodunda: birim dönüşümleri, protokol sürümleri, tampon boyutları. İlişkili sabitler const generic'lerle birlikte dizi boyutu olarak da kullanılabilir:
struct Kare;
impl Cokgen for Kare {
const KENAR: u32 = 4;
const AD: &'static str = "kare";
}
println!("{}", ozet::<Kare>()); // kare: 4 kenarUygulama Çokgen sabitleri
Yukarıdaki Cokgen trait'ini Ucgen ve Kare için uygula ve ozet fonksiyonunu yaz. ozet::<Ucgen>() ve ozet::<Kare>() sonuçlarını ayrı satırlara yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
trait Cokgen {
const KENAR: u32;
const AD: &'static str;
}
struct Ucgen;
struct Kare;
impl Cokgen for Ucgen {
const KENAR: u32 = 3;
const AD: &'static str = "üçgen";
}
impl Cokgen for Kare {
const KENAR: u32 = 4;
const AD: &'static str = "kare";
}
fn ozet<T: Cokgen>() -> String {
format!("{}: {} kenar", T::AD, T::KENAR)
}
fn main() {
println!("{}", ozet::<Ucgen>());
println!("{}", ozet::<Kare>());
}Beklenen çıktı
üçgen: 3 kenar kare: 4 kenar
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 İlişkili sabitler neden <code>self</code> almadan kullanılabilir?
- Kullanılamaz
- Global olduğu için
- Değer türe aittir, örneğe değil Doğru cevap
- Statik değişkendir
Açıklama: T::KENAR derleme anında yerine konur; çalışma anı maliyeti yoktur.
2 Sabit bildirimi
trait Cokgen {
____ KENAR: u32;
}
trait Cokgen {
const KENAR: u32;
}
Açıklama: Trait içindeki sabitler const ile bildirilir.
3 Sabit ve değeri
| Kavram | Anlamı |
|---|---|
Ucgen::KENAR |
3 |
Kare::KENAR |
4 |
u8::MAX |
255 |
i8::MIN |
-128 |