2016-03-22 8 views
3

Ich frage mich, ob es eine einfache Möglichkeit gibt, um einen benutzerdefinierten Typ in einem Deedle-Datenrahmen schönen Drucken hinzuzufügen.Pretty Printing in Deedle Datenrahmen

Im folgenden Beispiel:

open Deedle 

type PrimaryContactInfo = 
    | Default of int 
    | NonDefault of int 
    | Missing 

type Account = { PrimaryContact : PrimaryContactInfo } 

[ { PrimaryContact = Default(1) }; { PrimaryContact = Default(2) }; { PrimaryContact = NonDefault(5) } ] 
|> Frame.ofRecords 

ich die folgende Ausgabe in fsi erhalten:

 PrimaryContact       
0 -> FSI_0011+PrimaryContactInfo+Default  
1 -> FSI_0011+PrimaryContactInfo+Default  
2 -> FSI_0011+PrimaryContactInfo+NonDefault 

aber ich würde lieber Ausgabe wie folgt haben:

 PrimaryContact       
0 -> Default(1)  
1 -> Default(2) 
2 -> NonDefault(5) 

Ist das möglich ?

+0

Mögliches Duplikat: http://stackoverflow.com/q/7452074/126014 –

+0

Siehe auch https://fslang.uservoice.com/forums/245727-f-language/suggestions/7574961-override-tostring-for- diskriminiert-Gewerkschaften-und-r –

Antwort

4

Wie von this language feature suggestion impliziert, werden F # diskriminierte Gewerkschaften nicht automatisch schön in Strings konvertiert.

Sie können es gut machen zu konvertieren, indem ToString überschrieben:

type PrimaryContactInfo = 
    | Default of int 
    | NonDefault of int 
    | Missing 
    override this.ToString() = sprintf "%A" this 

Beachten Sie jedoch, dass die Verwendung von "%A" sein kann langsam, so messen, und schreiben Sie eine schnellere, explizite Implementierung falls erforderlich; zum Beispiel:

type PrimaryContactInfo = 
    | Default of int 
    | NonDefault of int 
    | Missing 
    override this.ToString() = 
     match this with 
     | Default i -> sprintf "Default %i" i 
     | NonDefault i -> sprintf "NonDefault %i" i 
     | Missing -> "Missing" 

Dies genau die gleiche Leistung wie sprintf "%A erzeugt, aber nicht Reflexion verwenden, so sollte in Theorie, schneller (aber nehmen Sie nicht mein Wort darauf: Maßnahme).