Frage

In Haskell ist es einfach, durch einfaches Hinzufügen deriving Show die Typdefinition eine algebraischen Typ / diskriminiert union „darstellbaren“ als String zu machen.

In F # Ich schreibe Dinge am Ende wie:

type Pos = 
    | Pos of int * int
    override this.ToString() = 
        match this with
        Pos(startp, endp) -> sprintf "Pos(%d, %d)" startp endp

und natürlich wird es viel schlimmer mit komplizierteren Typen.

Jede Art und Weise so etwas wie deriving Show in F # zu bekommen?

War es hilfreich?

Lösung

F # Druckfunktionen wie printf der Lage sind, angemessen Art alle Daten formatiert werden, wenn Sie die %A Formatbezeichner verwenden (sie verwenden ToString wenn Sie %O angeben). Sie können ToString mit sprintf implementieren, die den formatierten String zurückgibt:

type Pos =  
    | Pos of int * int 
    override x.ToString() = sprintf "%A" x 

Diese druckt zum Beispiel "Po (1, 2)" und es funktioniert für die meisten des F # -Typen (Listen, Gewerkschaften, Aufzeichnungen, Tupel). Es ist ein bisschen mehr als nur das Hinzufügen deriving Show aber zumindest müssen Sie den Druck nicht selbst implementieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top