Avatar ·

Sollte man das Deref-Trait für neue Typen (Newtypes) in Rust implementieren?

Hallo zusammen! Ich habe vor kurzem angefangen, Rust zu lernen, und bin auf eine interessante Frage zum Code-Design gestoßen. Oft erstelle ich Wrapper um bestehende Typen, um ihnen Semantik zu verleihen oder die Funktionalität einzuschränken. Zum Beispiel habe ich einen Typ `UserId`, der intern eine `u64` speichert: ```rust struct UserId(u64); ``` Ich möchte, dass `UserId` fast wie `u64` verwendet werden kann (Vergleiche, Ausgabe, Kopieren). Ich könnte natürlich manuell `Display` oder `PartialEq` implementieren, aber das ist viel Code. Allerdings bin ich auf ein Idiom gestoßen, bei dem man für solche neuen Typen das `Deref`-Trait implementiert: ```rust use std::ops::Deref; impl Deref for UserId { type Target = u64; fn deref(&self) -> &u64 { &self.0 } } ``` Jetzt kann ich Methoden von `u64` direkt auf `UserId` aufrufen, und es wird automatisch dereferenziert. Das scheint sehr praktisch. Aber überall steht, dass `Deref` für intelligente Zeiger (wie `Box`, `Rc`) gedacht ist, nicht für Typ-Aliase. Ich habe gelesen, dass Missbrauch...