Traits
Impl Display Rückgabetyp
Abschnitt betitelt „Impl Display Rückgabetyp“use std::fmt::Display;fn displayable<T: Display>(t: T) -> impl Display { t }
fn main() { let s = String::from("hello"); let mut s2 = displayable(s); s2.push_str(" world"); println!("{s2}");}Weil displayable impl Display zurückgibt, wissen wir nur, dass s2 ein Typ ist, der Display implementiert, nicht dass es ein String ist, der eine push_str-Methode besitzt. Daher können wir s2.push_str(..) nicht aufrufen. Wenn der Rückgabetyp von displayable -> T wäre, würde dieses Programm kompilieren.
Erforderliche Trait-Grenzen
Abschnitt betitelt „Erforderliche Trait-Grenzen“Welches ist die kleinste Menge von Trait-Grenzen für T, die benötigt wird, damit diese Funktion typgeprüft wird?
fn f<T: /* ??? */>(t: &T) { let t2 = t.clone(); println!("{t2}");}Da clone aufgerufen wird und die {}-Anzeige-Klammern in einem Formatierer verwendet werden, muss T Clone und Display implementieren.