capypad
0 Tage Serie
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
rust
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) -> String
where
T: 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