rust / intermediate
Snippet
Generische Traits mit Where-Klauseln
Where-Klauseln bieten eine sauberere Möglichkeit, komplexe generische Einschränkungen im Vergleich zu inline Trait-Grenzen auszudrücken. Sie erlauben mehrere Einschränkungen für einen einzelnen Typparameter und werden essentiell bei mehreren generischen Parametern oder komplexen Trait-Kombinationen.
snippet.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
use std::fmt::{Display, Debug};fn print_debug<T, U>(t: T, u: U) -> StringwhereT: Display + Debug,U: Clone + Into<String>,{format!("T: {:?}, U: {}", t, u.clone())}fn main() {println!("{}", print_debug(42, "hello"));}
Erklärung
1
use std::fmt::{Display, Debug};
Importiert Display und Debug Traits, die für die generischen Einschränkungen benötigt werden
2
fn print_debug<T, U>(t: T, u: U) -> String
Funktion mit zwei generischen Typparametern T und U
3
where T: Display + Debug,
T muss sowohl Display (zum Drucken) als auch Debug (für {:?} Formatierung) implementieren
4
U: Clone + Into<String>,
U muss clonebar sein und in einen String konvertierbar sein
5
format!("T: {:?}, U: {}", t, u.clone())
Verwendet Debug-Formatierung für t und klont u, um die Into<String>-Einschränkung zu erfüllen