Question

Dans Haskell, il est facile de faire un type algébrique / union discriminée « affichable » comme une chaîne en ajoutant simplement deriving Show à la définition de type.

En F # Je finis par écrire des choses comme:

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

et, évidemment, il devient bien pire avec des types plus complexes.

Toute façon d'obtenir quelque chose comme deriving Show en F #?

Était-ce utile?

La solution

F # fonctions d'impression telles que printf peuvent raisonnablement formater tout type de données si vous utilisez le spécificateur de format %A (ils utilisent ToString si vous spécifiez %O). Vous pouvez mettre en œuvre à l'aide ToString sprintf qui retourne la chaîne formatée:

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

Cette affiche par exemple "Pos (1, 2)" et cela fonctionne pour la plupart des types de # F (listes, syndicats, dossiers, tuples). Il est un peu plus que le simple ajout deriving Show mais au moins vous ne devez pas mettre en œuvre la même impression.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top