Trait-Objekte
Downcasting von Trait-Objekten
Abschnitt betitelt „Downcasting von Trait-Objekten“use std::fmt::Debug;fn main() { let n = 1; let s = String::from("Hello"); let v: Vec<&dyn Debug> = vec![&n, &s]; let n_ref = v[0] as &i32; println!("{}", n_ref + 1);}Im Gegensatz zu einigen OOP-Sprachen kann ein Trait-Objekt nicht auf einen konkreteren Typ „heruntergecastet“ werden (außer im Fall des Any-Traits).
Trait-Objekte oder Generics
Abschnitt betitelt „Trait-Objekte oder Generics“Betrachten Sie die Implementierung einer generischen Funktion auf zwei Arten:
fn f_opt1<T: SomeTrait>(t: &T) { /* ... */ }fn f_opt2(t: &dyn SomeTrait) { /* ... */ }Welche der folgenden Gründe sprechen in den meisten Fällen dafür, die Trait-Objekt-Version (f_opt2) der typ-parametrischen Version (f_opt1) vorzuziehen?
Wählen Sie alle zutreffenden Optionen aus.
Durch die Vermeidung von Monomorphisierung führen Trait-Objekt-Funktionen sowohl zu schnelleren Kompilierzeiten als auch zu kleineren Binärdateien. Dies geht jedoch in der Regel auf Kosten der Laufzeitleistung. Trait-Objekte sind für Entwickler selten einfacher zu handhaben als Trait-gebundene Generics.