where clause
- Rust kursu
- Orta seviye
- Ders 21/115
- 4 dk
where ile uzun trait sınırlarını okunabilir biçimde yazarsın.
where clause
Sınırlar uzadığında imza okunmaz hale gelir. where yan tümcesi sınırları imzanın sonuna taşır:
use std::fmt::{Debug, Display};
fn ozetle<T, U>(a: &T, b: &U) -> String
where
T: Display,
U: Debug,
{
format!("{a} / {b:?}")
}Anlam aynıdır; yalnızca yazım farklıdır. Birden çok tür parametresi ya da uzun sınırlar varsa where tercih edilir.
İlişkili tür sınırı
where, bir trait'in ilişkili türüne sınır koymak için de kullanılır. Örneğin herhangi bir yineleyicinin elemanlarını yazdırmak:
fn hepsini_yaz<I>(it: I)
where
I: Iterator,
I::Item: std::fmt::Display,
{
for x in it {
print!("{x} ");
}
println!();
}
hepsini_yaz([1, 2, 3].iter()); // 1 2 3Uygulama Özetle
Yukarıdaki ozetle fonksiyonunu where ile yaz. ozetle(&42, &vec![1, 2]) sonucunu yazdır.
Başlangıç kodu
use std::fmt::{Debug, Display};
fn main() {
// buraya yaz
}Örnek çözüm
use std::fmt::{Debug, Display};
fn ozetle<T, U>(a: &T, b: &U) -> String
where
T: Display,
U: Debug,
{
format!("{a} / {b:?}")
}
fn main() {
println!("{}", ozetle(&42, &vec![1, 2]));
}Beklenen çıktı
42 / [1, 2]
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>where</code> ile yazılabilip satır içi sınırla yazılamayan şey hangisi?
- T: Display
- T: Clone + Debug
- Hiçbiri
- Tür parametresi olmayan türlere sınır: where Vec<T>: Debug Doğru cevap
Açıklama: where daha esnektir; karmaşık türler ve ilişkili türler (T::Item: Display) için sınır yazmayı sağlar.
2 Sınırları sona taşı
fn ozetle<T, U>(a: &T, b: &U) -> String
____
T: Display,
U: Debug,
{
format!("{a} / {b:?}")
}
fn ozetle<T, U>(a: &T, b: &U) -> String
where
T: Display,
U: Debug,
{
format!("{a} / {b:?}")
}
Açıklama: where yan tümcesi sınırları imzadan sonra listeler.
3 Yazım ve anlamı
| Kavram | Anlamı |
|---|---|
fn f<T: Display>(x: T) |
Satır içi sınır |
where T: Display |
where sınırı |
I::Item: Display |
İlişkili tür sınırı |
T: Display, U: Debug |
İki parametre, iki sınır |