Wie stelle ich eine standardmäßige Debug-Implementierung bereit?

8

Es wird empfohlen, #[derive(Debug)] für die meisten von Ihnen erstellten Strukturen zu verwenden, um das Debuggen zu unterstützen. Dies ist jedoch nicht möglich, wenn Ihre Struktur einen Typ ohne Debug enthält, z. B. Merkmale. Aber wenn ich das Merkmal unter meiner Kontrolle habe, kann ich etwas tun, um die Implementierung dieses Merkmals durch die Benutzer in der Debug-Nachricht erscheinen zu lassen?

Ich könnte verlangen, dass Leute, die mein Merkmal implementieren, auch Debug implementieren, aber ich möchte diese willkürliche Anforderung nicht hinzufügen:

%Vor%

Ich könnte einfach Debug für mein Merkmal implementieren:

%Vor%

Dies erlaubt Implementierungen nicht, Debug zu überschreiben - es ist fast so, als wäre die Funktion nicht virtuell. Wie kann ich das schaffen?

%Vor%

Ausgaben:

%Vor%

Was ich will:

%Vor%

Ich möchte nur die erste Ausgabe, wenn B nicht Debug implementiert.

    
Justin 19.02.2017, 23:55
quelle

1 Antwort

5

Sie können Ihre eigene Trait-Methode erstellen. Typen, die das Debugging verbessern möchten und implementieren Debug kann delegieren:

%Vor%

Eine alternative Lösung, für die die Funktion für die unstable Spezialisierung erforderlich ist:

%Vor%

Beachten Sie, dass dies den Container belastet.

    
Shepmaster 20.02.2017, 01:37
quelle

Tags und Links