Beim Versuch, die Debug
Eigenschaft für einen benutzerdefinierten Typ zu implementieren, stolperte ich über die Implementierung für Vec<T>
. Ich habe Schwierigkeiten zu verstehen, wie es funktioniert.Die Debug-Implementierung für Vec verstehen <T>
Die Umsetzung geht so:
impl<T: fmt::Debug> fmt::Debug for Vec<T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
fmt::Debug::fmt(&**self, f)
}
}
Ich verstehe es die fmt
Implementierung für eine andere Art nennt. Was ich nicht verstehen kann ist, welcher Typ es ist. Ich habe versucht, es mit der Hilfe von another question herauszufinden, und suche zwischen dem implementations of Debug
für etwas, das angemessen aussieht (vielleicht so etwas wie &[T]
), aber mit keinem Erfolg.
Was ist die genaue Bedeutung von &**self
in diesem Zusammenhang? Welche Implementierung von Debug
wird aufgerufen?
Vielen Dank! Ich vermisse nur eine Sache: Ich habe eine Implementierung für '[T]' gefunden, aber nicht für '& [T]', wird letzteres aufgerufen? Warum? – toro2k
@ toro2k Ich habe ein bisschen mehr dazu hinzugefügt. Lass es mich wissen, wenn es hilft! – Shepmaster
Ich glaube nicht, dass es eine automatische Dereferenzierung (oder automatische Referenzierung) gibt, weil 'fmt :: Debug :: fmt()' sich selbst als Referenz nimmt, dh es erwartet ein '& [T]', und das ist es gegeben ein '& [T]'. –